C中变量的声明和定义之间的混淆

我是C的新手,我在变量的声明和定义之间经历了一些混淆.我想知道的另一件事是如果以下情况属实:

“Declaration appears many times and definition comes once.”

也:

int x;

这只是一个声明吗?由于内存是为x分配的,为什么这不是一个定义而不是声明?

这不是你在C中看得太多的东西,但它的工作原理如下:

在头文件中,您可以使用如下行:

extern int x; //declaration

由于extern修饰符,这告诉编译器在某处有一个名为x的int.编译器不为它分配空间 – 它只是将int x添加到您可以使用的变量列表中.当它看到像这样的一行时,它只会为x分配空间:

int x; //definition

你可以看到因为只有int x; line更改你的可执行文件,你可以拥有尽可能多的extern int x;你想要的线条.只要只有int x;一行,一切都会像你想要的那样工作 – 拥有多个声明不会改变一件事.

一个更好的例子来自C(对不起,如果这是一个只有C的问题 – 这也适用于结构,但我不知道我头顶的语法):

class Pineapple; //declaration

Pineapple* ptr;  //this works
Pineapple pine;  //this DOES NOT work

该声明告诉编译器有一个名为“Pineapple”的类.它没有告诉我们关于班级的任何信息(它有多大,它的成员是什么).我们现在可以使用指向Pineapples的指针,但是我们还没有实例 – 我们不知道菠萝的构成是什么,所以我们不知道实例占用了多少空间.

class Pineapple
{
public:
    int ounces;
    char* name;
}; //definition

Pineapple* ptr;   //still works
Pineapple pine;   //this works now too!
//we can even get at member variables, 'cause we know what they are now:
pine.ounces = 17;

在定义之后,我们知道关于类的所有内容,因此我们也可以拥有实例.和C示例一样,您可以有多个声明,但只有一个定义.

希望这可以帮助!

相关文章
相关标签/搜索