Re: [問題] 關於指標變數
※ 引述《watermay (如雲)》之銘言:
: 現有變數宣告如下:
: int intArray[3][2] = {{10,20},{15,25},{50,40}};
: int **intPtr1 = intArray;
[Warning] initialization from incompatible pointer type
intArray decay 成指標時, 值跟 &intArray[0][0] 是一樣的, 換
句話說:
assert( (void*)intArray == &intArray[0][0] );
對於 &intArray[0][0] 只能用星星取值一次, 所以此題正確應為:
int *intPtr1 = (int*)intArray;
: int *intPtr2 = &intArray[1][1];
: int *intPtr3[2] = &intArray[2];
intArray[2]的型態為 int[2], 若對它取址則得 int(*)[2], 所以
本題應為:
int (*intPtr3)[2] = &intArray[2];
: intArray的記憶體位址是0x0008600; int為sizeof(int) = 4;
不考慮記憶體值不合法的情況下
: 試回答下列問題(如果是正確的敘述請寫出左邊變數的數值,錯誤請說明原因,但每題題
: 目是有關連性的):
: (一)*intPtr2 = intArray[1][1];
相等
: (二)intPtr1 + 1 = intArray[0];
光看數值的話:
assert( (void*)intPtr1 == (void*)intArray[0] );
但因為左邊運算元有往後加的動作, 所以不相等
: (三)++intPtr1 = &intArray[1];
intPtr1 指向 intArray[0][1], 而論數值 &intArray[1] 為
intArray[1][0] 的位址, 不相等
: (四)*(*intPtr1 + 1) = intArray[1][0];
*intPtr1 的型態為int, 兩個整數相加除非代表特殊可存取的記憶
體位址, 否則無法對它做任何取值的動作, 不相等
: (五)*(*intPtr3 + 1) = intArray[2][1];
*intPtr3 的型態是 int[2], +1 之後型態變成 int*, 取值之後效
力等同於:
int *p = *intPtr3; // 指到 intArray[2][0]
int *p2 = p + 1; // p2 指到 intArray[2][1]
所以這邊是相等
: (黃色文字是我加上去的,題目好像有出錯)
: 我的疑問:不知道題目是要判斷等號兩邊相等,還是要判斷是否為正確的語法(可以執行)
: 我覺得答案是:
: 1.相等 合法
: 2.不相等 不合法
: 3.不相等 不合法
: 4.不相等 合法(因為延續第三題)
: 5.不相等 不合法
: 我不知道我的答案對不對,我也不知道我的觀念是否正確?
: 麻煩各位大大們了,謝謝^^
答案對不對跑一下程式就清楚了, 不過這樣視型態如無物的程式我
還是第一次看見 @_@! 出題的人是小學生嗎? 編得過才怪, 還敢拿
來考人...
--
▂▅▂ ▁ ● ◣ 朴 ☆ 素 ★ 妍 ◢
◢ ◣ ◢▂▂◣ ◢▂※◣ ◢▄▂◣ T.T.L Listen 2
★ ★ ★ ★ ▉ ★ ★▏▉ ★ ★◣ http://ppt.cc/jIUk
◥ˇ◢ ▃◥ˇ◤▃ ◥ˇ◤ ◥ˇ◤◢ 說什麼結束
▃▃▇▃▃ ◢▇◣ ▋▎ ▋¥▎ ◢ http://ppt.cc/zQtB
▼ ▼ ▼ ▼ ψ髮箍 ◤ ◣
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.197.115
※ 編輯: loveme00835 來自: 140.121.197.115 (04/27 03:35)
推
04/27 06:40, , 1F
04/27 06:40, 1F
→
04/27 09:25, , 2F
04/27 09:25, 2F
推
04/28 06:51, , 3F
04/28 06:51, 3F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章