簡體   English   中英

你能解釋一下為什么這段代碼有這個 output 嗎?

[英]Can you explain why this code has this output?

#include <stdio.h>
int main(){
    int a[7];
    for (int i=0; i<7; i++) {
        a[i]=i;
        a[6-i]=i;
    }
    for (int i=0; i<7; i++) {
        printf("%d ", a[i]);
    }
}

你能解釋一下為什么這個代碼 output 這個:

6 5 4 3 4 5 6 

謝謝。

這個

a[6-i]=i;

會像這樣分配數組

a[6]=0
a[5]=1
a[4]=2
a[3]=3

等等。 然而

a[i]=i;

會像這樣分配它

a[0]=0
a[1]=1
And this goes on.

由於a[6]已分配為 0,因此在第 7 次循環a[6]=6時將其替換,依此類推。 我不知道你期望什么。

當你不明白為什么你的程序會以某種方式運行時,最好的方法是調試它。 為此,您應該使用像 gdb 這樣的調試器,這是一個很棒的工具,您真的應該學習使用它,尤其是因為您是初學者。 這是初學者的教程 你也應該閱讀這個

現在回答您的問題,由於您的代碼很小,我們可以通過展開它來手動調試它,其中 U 表示未定義的值:

  • i == 0時,您有a = {0, U, U, U, U, U, 0}
  • i == 1時,您有a = {0, 1, U, U, U, 1, 0}
  • i == 2時,您有a = {0, 1, 2, U, 2, 1, 0}
  • i == 3時,您有a = {0, 1, 2, 3, 2, 1, 0}

現在這就是你的程序應該停止的地方,因為它開始覆蓋舊值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM