未初始化的变量/指针变成定义或声明?

时间:2014-07-15 06:45:54

标签: c declaration definition

假设我有以下程序:

int main(void)
{
int i; //Line 1
i=5;  //Line 2

int *j; //line 3
j=&i; //line 4
}

如果我尝试在Visual Studio中的第1行之后打印i,它会给我一个编译时错误,说明我使用的单元化变量。这是否意味着没有为i分配存储,而第1行只是一个声明?我理解第2行是一个定义。

另外,3号线和4号线怎么样?它们是声明还是定义?

1 个答案:

答案 0 :(得分:5)

第1行和第3行是定义,说它们是声明也是合法的,因为所有定义都是声明。

错误是因为使用未初始化的变量是未定义的行为,而不是因为它们的存储未被分配。

第2行和第4行是赋值语句。你似乎对初始化和任务感到困惑。

int n = 42; //definition with initalization
int m;      //definition, but uninitiazlied
n = 10;     //assignment
m = 10;     //assignment