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

use*_*198 0 c declaration definition

假设我有以下程序:

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

int *j; //line 3
j=&i; //line 4
}
Run Code Online (Sandbox Code Playgroud)

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

还有,第3行和第4行呢?他们是宣言还是定义?

Yu *_*Hao 5

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

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

第2行和第4行是赋值语句.你似乎对初始化和分配感到困惑.

int n = 42; //definition with initalization
int m;      //definition, but uninitiazlied
n = 10;     //assignment
m = 10;     //assignment
Run Code Online (Sandbox Code Playgroud)