程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 堆棧-一段奇怪的代碼,求解釋

堆棧-一段奇怪的代碼,求解釋

編輯:編程綜合問答
一段奇怪的代碼,求解釋

代碼的意思是說,在聲明的時候,因為棧的分配原因(先入後出),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個元素的可能性最大)。

u011475211
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved