c語言中關於二維陣列指標

2022-03-05 22:08:55 字數 939 閱讀 5761

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...