根据C标准,这被认为是一个定义
int x;
因为它声明x并分配存储空间。但这也是一个定义吗?
int *x;
也就是说,声明指针变量或数组变量是否分配存储?我猜不是因为我们必须使用malloc。
答案 0 :(得分:6)
int* x;
是一个定义。它分配存储来存储指针。它不为整数分配任何存储 - 如果您不想指向现有变量(或其他内存位置),那么这就是您需要malloc
的原因。
纯粹的声明类似extern int x;
或extern int* x;
,然后在不同的编译单元中有相应的定义。
答案 1 :(得分:4)
int *x;
分配存储空间。变量x
的存储空间等于sizeof(int *)
。如果它在块作用域,则包含垃圾值,如果它在文件范围,则包含空指针值。