[問題] 指標陣列問題

看板C_and_CPP (C/C++)作者 (kswiss)時間14年前 (2011/10/02 09:46), 編輯推噓0(0018)
留言18則, 3人參與, 最新討論串1/1
開發平台(Platform): VC++ 問題(Question): 請問前輩們 發現到 printf("%p\n", aInt[0]); printf("%p\n",&aInt); aInt[0]是指標常數, 陣列名稱不就是指標(裡面放的是位址)嗎?? 為什麼以上兩個address會不一樣???? 程式碼(Code): #include<stdio> int main() { int i; char** pInt; char* aint [3] = { {"0, 1, 2, 3"}, {"10, 11, 12, 13"}, {"20, 21, 22, 23"} }; pint = aInt; printf("%p\n", &aInt); printf("%p\n", (&aInt[0][0])); for (i=1; i<=12; i++) printf("\n"); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.42.170.127

10/02 10:44, , 1F
陣列名稱是指標所以"&Array[0]"的值和"Array"的值印出來一樣
10/02 10:44, 1F

10/02 10:44, , 2F
不曉得你觀念哪邊不對,所以弄反了...
10/02 10:44, 2F

10/02 11:29, , 3F
應該是(&aInt[0][0])的值會與aInt[0]相同
10/02 11:29, 3F

10/02 11:31, , 4F
aInt[0]肚子裡的值會與aInt(&aInt[0])相同才對呀
10/02 11:31, 4F

10/02 11:37, , 5F
因一維陣列是這麼表式的&a[0]=a=&a
10/02 11:37, 5F

10/02 11:53, , 6F
對,但是因為你的程式裡面不是二維陣列
10/02 11:53, 6F

10/02 11:53, , 7F
你實際上做出來的是三個元素的一維char*陣列
10/02 11:53, 7F

10/02 11:54, , 8F
然後把這三個char*分別指到三個const string去
10/02 11:54, 8F

10/02 11:55, , 9F
雖然dereference的方式類似,指標和陣列還是會有區別
10/02 11:55, 9F

10/02 11:55, , 10F
事實上我覺得就算是二維陣列也只保證元素是在同一區塊
10/02 11:55, 10F

10/02 11:56, , 11F
應該說最底層的元素是allocate在同一區塊
10/02 11:56, 11F

10/02 12:00, , 12F
如果想要達到你的效果的話應該是先建好二維陣列後
10/02 12:00, 12F

10/02 12:00, , 13F
再把你想要的字串strcpy進去
10/02 12:00, 13F

10/02 12:10, , 14F
那我現在的方式也有可能是底層元素allocate不同區塊所造
10/02 12:10, 14F

10/02 12:10, , 15F
的囉??
10/02 12:10, 15F

10/02 12:16, , 16F
我覺得你把debugger開起來觀察locals的位址比較快
10/02 12:16, 16F

10/02 15:43, , 17F
是時候該去學 ide 怎麼 trace 了,何況你還用 vs.
10/02 15:43, 17F

10/02 15:43, , 18F
http://ppt.cc/0t;0 還沒寫完,不過夠看了.
10/02 15:43, 18F
文章代碼(AID): #1EXy9sVs (C_and_CPP)
文章代碼(AID): #1EXy9sVs (C_and_CPP)