1樓:匿名使用者
二維陣列其實在記憶體中等同於一維陣列,僅僅是在編譯階段就幫你轉換掉了。
a[3][4]記憶體分配時等同於a[3*4]上面的**應該改寫成printf("%d",*((p+i * 4)+j));
*(*(p+i)+j)
這種寫法系統理解為先取*(p + i) ---------取p+i該位置的值,假設 i = 2,那麼該值就是3,
然後再去用3+j,假設j = 1,那麼*(*(p+i)+j)就是*(4),去記憶體地址為4的值,明顯4這個地址是非法的,系統報錯。
2樓:
如果int * p宣告指標p,那麼p是一個指向int型變數的指標:
1、直接用p=a;存在型別不匹配;
2、*(p+i)+j是一個int型變數,不是一個地址,故而不能用*取其值;
如果用int (*p)[4];宣告指標,那麼p是一個指標陣列;可以用*p也是一個地址,那麼*(p+i)+j還是一個地址,自然可以用*取其值;
當然,如果你不想用指標資料,你可以如下改造程式:
#include
void main()
;int * p,i,j;
p=(int*)a; // 強制型別轉換
scanf("%d,%d",&i,&j);
printf("%d",*(p+i*4+j));
return;}
3樓:花花浪客
這是嚴格語法檢查造成的,事實上你強制轉化下
p = (int*)a也可以
4樓:
平時用的一維陣列用﹡p.二維就是兩個一維,所以指標也跟著變了,
5樓:橙心橙願
因為a[3][4]是二維陣列,a代表的就是陣列指標,然而p只是一個int型的整數指標,所以p=a會錯誤
c語言二維陣列怎麼表示,C語言二維陣列定義是什麼,然後int a 1 2 是代表什麼意思?怎麼用這個二維陣列
int a m n 就表示一個m行n列的整型二維陣列在c語言中陣列的下標是從0開始的所以,內陣列a的元素個數可以表示為 容a 0 0 a m 1 n 1 例如 include int main return 0 執行結果 1 23 4 4 51 2 3 44 5 int a 3 2 定義的是陣列ba...
C語言二維陣列問題
一維陣列,a表示的就是首元素的地址,a就是首元素。再看二維陣列,二維陣列如a 2 2 兩行兩列。是a 0 0 a 0 1 a 1 0 a 1 1 它不是一維陣列,但可以用一維陣列表示。a i a i a i a i 0 這幾個值是相等的,但意義不同,a i表示第i行的首地址,指向行。a i a i ...
C語言中,二維陣列a指的是什麼,C語言中,一個二維陣列a59中a4指的是什麼?
二維陣列 a 5 9 中a 4 指的是a 4 0 的地址,a 5 9 相當於有5個一位陣列每個陣列長度為9a 4 相當於第四個陣列的首地址,a 4 1等於a 4 1 滿意請採納,不懂請追問 c語言中,一個二維陣列 a 5 9 中a 4 指的是 a 4 0 a 4 8 的一個一維陣列的首地址,也即是a...