2014-02-26 41 views
1

根据C标准,这被认为是定义这是C中的一个定义吗?

int x; 

因为它声明x和分配存储空间。但这也是一个定义吗?

int *x; 

也就是说,声明一个指针变量或数组变量是否分配存储空间?我猜不是因为我们必须使用malloc。

+1

用T替换类型('int *'),所以..'T x':这是否被认为是一个定义? – user2864740

+4

在这两种情况下,都会分配一个对象。在第二种情况下,该对象恰好是一个指针。 –

+4

与之前的数千人一样,你需要学习区分指向他们指向的东西的指针。指针的存储也是存储。指针本身就是数据,不管它是否被用来访问更多的数据。 – delnan

回答

5

int* x;是一个定义。它分配存储来存储指针。它不会为整数分配任何存储空间 - 这就是为什么如果您不想指向现有变量(或其他内存位置)需要malloc

纯声明将类似extern int x;extern int* x;,然后在不同的编译单元中具有相应的定义。

4

int *x;分配存储。变量x被分配的存储等于sizeof(int *)。它包含一个垃圾值,如果它位于块范围,或者包含一个空值指针,如果它位于文件范围。

+3

它最初包含垃圾,如果它在块范围。如果它在文件范围内,它最初包含一个空指针值。 –

+0

@KeithThompson谢谢! –

相关问题