匿名使用者
匿名使用者 發問時間: 電腦與網際網路程式設計 · 2 0 年前

有人會指標陣列嗎?急...>”<

考慮以下c程式片段:

int data[3]={2,4,9};

int *a,*b;

a=&data[0];

b=a+1;

(A) a的位址(address)與data的位址相同

(B) a+1的位址與b位址相同

(C)*b的值為4

(D)*(a+2)的值與data[3]的值相同

答案是C

有人可以告訴我為什麼是C嗎?

還有A、B、D到底錯那裡呢?

寫越詳細越好,感謝回答問題的大大(敬上12萬分的敬意^^")

PS.不要跟我說去查書就有了...

重點是...我現在卡死在這裡...>"<

而且又快考試了(二技)@@"

謝謝各位網友囉!

4 個解答

評分
  • Lv 7
    2 0 年前
    最佳解答

    A. &a不等於&data因為他們是兩個不一樣的變數. 所以(A)不對.

    B. data跟&data[0]是一樣的. 因為data[0]是指在data裡的第一個數. &data[0]就是在data裡的第一個數的住址. 所以&data[0]== data. 既然a == &data[0], 所以a == data. 既然a == data, 所以b == data + 1 == &data[0+1] = &data[1] == a+1. 既然&data[1] 的位址是data裡的第二個數的住址所以&b != &data[1]. 因b和data[1]是兩個不一樣的變數. 所以(B)不對.

    C. 從B的推理我們知道b = &data[1]. 所以*b = *(&data[1]) = data[1] = 4. 所以(C)是對的.

    D. 從B的推理我們知道a = &data[0]. 所以a+2 = &data[0+2] = &data[2]. *(a+2) = *(&data[2]) = data[2] != data[3]. 所以(D)不對.

    2005-04-01 12:30:29 補充:

    Xor, 是沒有data[3]的"宣告". 因宣告data時只有data[3], 0-2.

    但是並不是說你不能讀取data[3].沒宣告只表示你不應該讀取或存寫到data[3]裡. 如果讀取的話祇會讀取亂數而已. 這是C\C++的缺點也是優點.

    2005-04-01 13:06:51 補充:

    Xor, 不能講C\C++自作主張.相反的VB才叫自作主張. C\C++給你很多的自由空間.但天下沒有白吃的午餐. 多自由就多麻煩. 這是C\C++的優點也是缺點

    2005-04-01 14:14:46 補充:

    如要學好程式設計,就不要怕麻煩... :)

    如果這樣就麻煩,那以後寫多線程(multithreaded)的程式不就糟糕了... :)

    參考資料: Myself
  • 2 0 年前

    int data[3]={2,4,9};

    int *a,*b;

    a=&data[0];//將=&data[0]值賦于a,所以a指為2

    b=a+1; //將a+1賦于b,b就指向4

    了了嗎

    (A) a的位址(address)與data的位址相同

    (B) a+1的位址與b位址相同

    (C)*b的值為4

    (D)*(a+2)的值與data[3]的值相同

  • 匿名使用者
    2 0 年前

    只是這樣子

    Debug時不是會麻煩許多?

  • yup
    Lv 5
    2 0 年前

    to:龍

    int data[3]有data[0],data[1],data[2]。

    會有data[3]嗎?

    2005-04-01 12:35:37 補充:

    了解,原來會這樣。自作主張的C\C++真討厭

還有問題?馬上發問,尋求解答。