代碼的意思是說,在聲明的時候,因為棧的分配原因(先入後出),k[10]就是i的地址。然後i就會被修改成0,循環再次開始,就這樣出現了一個死循環。
為什麼k[10]就是i的地址呢?
int m=1;
int i =0;
int k[10] = {0};
printf("&m=%d\n",&m);
printf("&i=%d\n",&i);
printf("&k[0]=%d\n",&k[0]);
printf("&k[9]=%d\n",&k[9]);
printf("&k[10]=%d\n",&k[10]);
for(;i <= 10; ++i)
{
k[i] = 0;
}
printf("HelloWorld!\n");
之前關於數據對齊你可以忽略。編譯器果然是多為數組預留了2個int的空余,估計還是為了防止數組越界(通常越界1~2個元素的可能性最大)。