我確信之前已經問過這個問題,但粗略的谷歌和堆棧溢出搜索沒有找到答案。解引用數組vs指針
#include <stdio.h>
int main() {
char a[128][1024];
strcpy(a[0], "hello");
strcpy(a[1], "foo");
strcpy(a[2], "bar");
char **b = a;
printf("%s\n", a[0]); //same as printf("%s\n", a)
printf("%s\n", a[2]+1); //print from 2nd char of 3rd string
printf("%s\n", b); //same as printf("%s\n", a), makes sense
printf("%s\n", b[0]); //segfault???
}
首先,爲什麼最後一個段錯誤?我期望與數組a
一樣的行爲。我如何以廣義的方式訪問b中的第n個字符串? a和b之間的治療有什麼區別?
在類似的筆記中,我理解它的方式a[n]
是*(a+n)
的語法糖。這是正確的,無論是指針和數組?然而,a
和b
似乎獲得了不同的行爲。
謝謝!
您確定您已啓用所有警告嗎?並閱讀所有200萬SO帖子,告訴你,一個數組是不一樣的指針? –
@KerrekSB很明顯 - 這就是代碼演示的內容。我只是要求解釋。 –