Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这是C语言中的定义吗?_C_Declaration_Definition - Fatal编程技术网

这是C语言中的定义吗?

这是C语言中的定义吗?,c,declaration,definition,C,Declaration,Definition,根据C标准,这被视为一个定义 int x; 因为它声明x并分配存储。但这也是一个定义吗 int *x; 也就是说,声明指针变量或数组变量是否分配存储?我猜不会,因为我们必须使用malloc是一个定义。它分配存储来存储指针。它不为整数分配任何存储—这就是为什么如果不想指向现有变量(或其他内存位置),则需要malloc 纯声明类似于extern intx或外部内部*x,然后在不同的编译单元中有相应的定义。int*x分配存储。变量x分配的存储等于sizeof(int*)。如果它在块范围内,则它包

根据C标准,这被视为一个定义

int x; 
因为它声明x并分配存储。但这也是一个定义吗

int *x;

也就是说,声明指针变量或数组变量是否分配存储?我猜不会,因为我们必须使用malloc是一个定义。它分配存储来存储指针。它不为整数分配任何存储—这就是为什么如果不想指向现有变量(或其他内存位置),则需要
malloc


纯声明类似于
extern intx
外部内部*x,然后在不同的编译单元中有相应的定义。

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

将类型(
int*
)替换为T,因此
tx
:这被认为是一个定义吗?在这两种情况下,都分配了一个对象。在第二种情况下,这个对象恰好是一个指针。你像以前一样,需要学会区分指针和它们指向的东西。指针的存储也是存储。指针本身就是数据,不管它是否用于访问更多数据。您不必使用
malloc
。您可以将空指针值分配给
x
,也可以将某个对象的地址分配给它:
int n=42;int*x;x=&n将其声明为int*x的问题是,您可能会将int*x、y误读为int*x;实际为int*x时为int*y;int y。如果它在块范围内,则它最初包含垃圾。如果在文件范围内,它最初包含一个空指针值。