定义变量后,编译器会为该变量分配内存。int i; // The compiler will allocate sizeof(int) bytes for ii 上面定义的未初始化,并且具有不确定的值。要将数据写入分配给的内存位置i,您需要指定变量的地址。该声明scanf("%d", &i);用户会将int数据写入为分配的内存位置i。如果&未放置在前面i,scanf则将尝试将输入数据i而不是写入存储位置&i。由于i包含不确定的值,因此有可能包含与存储地址相同的值,或者包含超出存储地址范围的值。在这两种情况下,程序都可能会出现异常行为,并导致未定义的行为。在这种情况下,可能会发生任何事情。