已經定義一維陣列a 4a表示二維陣列嗎 a 1表示a

2021-09-11 19:00:41 字數 4330 閱讀 7368

1樓:匿名使用者

1 &a不會表示2維陣列,他是對a陣列的首地址取地址值,這個時候&a就是陣列a的首地址

2 &a+1 表示的是一個地址,哪個地址呢,從陣列a的首地址便宜 sizeof(a)大小個位元組的地址,在這裡偏移的是 sizeof(a) = 16;

3 一維陣列和二維陣列在記憶體中都是連續的記憶體,沒有什麼不同,所以維度只是人為的區分。

2樓:

&a的型別是int (*)[4]

並不能說&a表示一個嚴格意義上的二維陣列

或者你可以把他想成一個“每一行”只有一個元素的二位陣列&a+1是a[1][0]的地址值

3樓:匿名使用者

對於int a[n],n是常量,a是一個指標,其型別是*int,其內容是a[0]的存放地址,&a是指標a的存放地址,顯然&a[0] ≠ &a。

而對於int b[n][m], n,m為常量,b的型別為**int,b[0]存放的是b[0][0]的地址,a[n]和b[n][m]的區別是明顯的,但由於二維陣列元素的存放順序在各維間是連續的,所以可以用一維陣列的訪問方法存取二維陣列元素,比如,b[1][2]可以寫作(*b[1] + 2),還可以寫作b[1 * n + 2],但如何用訪問二維陣列的方法存取一維陣列的內容尚需仔細斟酌。

4樓:恨水水水長東

&a表示一個二維陣列的首地址,&a+1表示a[1][0]的地址

5樓:匿名使用者

前面的回答有一個非常搞笑的扯淡 陣列不等於指標 **int同樣很搞笑

還有不太明白為什麼所有人都把a當做int處理。。。現假設a是t的陣列,即t[4]。

回到正題 &a 的型別是 t(*)[4], 既不是二維陣列的t[x][y],也不是二級指標的t**,故&a不表示一個二維陣列。

&a+1實際上跑到了a的後面。。類似這樣(不太標準)

-----a------   |

實際上跑到了這裡

因為a是t[4]型別,所以a[1]得到的是int型的值,對其取下標是非法的。所以a[1][0]是一個非法的表示式。

咳咳以下都是廢話。。怎麼跑題了。。。既然打出來就懶得刪了

至於&a[1][0],編譯器解釋為&((a[1])[0]),同樣非法。

(&a)[1][0] 就是*(*(&a+1)+0).

lz可以執行一下這個程式:

#include

int main(void)

;printf("%p\n", &a[0] + 1);

printf("%p\n", &a + 1);

/* printf("%p\n", &a[1][0]); */

printf("%p\n", &( (&a)[1][0] ));

printf("%p\n", &( (&a[1])[0] ));

return 0;}

定義了二維陣列a[3][4],那麼a+1,*(a+1),*a[1],*(a[0]+1)各代表什麼意思

6樓:匿名使用者

因為a是t[4]型別,所

以a[1]得到的是int型的值,對其取下標是非法的內。所以a[1][0]是一個非法的表示式。

咳咳以容下都是廢話。。怎麼跑題了。。。既然打出來就懶得刪了至於&a[1][0],編譯器解釋為&((a[1])[0]),同樣非法。

7樓:聽不清啊

定義了二維陣列a[3][4],那麼

a+1=*(a+1)=*a[1],表示a[1]的地址,即&a[[1]。

*(a[0]+1)表示a[0][1]

定義int a[2][4],表示陣列a中的元素個數是幾個

8樓:匿名使用者

定義int a[2][4],陣列a中的元bai素個數是8個。

行號du

從zhi0~1,

列號從0~3,

共2*4=8個。

陣列類dao型說明 在c語言內中使用陣列必須先容進行型別說明。

擴充套件資料:

舉例說明整型陣列a,有10個元素。若要表示第10個元素,則使用a[9]。第一個則是a[0]。

int a[10];

說明實型陣列b,有10個元素,實型陣列c,有20個元素。

float b[10],c[20];

說明字元陣列ch,有20個元素。

char ch[20];

特點1、陣列是相同資料型別的元素的集合。

2、陣列中的各元素的儲存是有先後順序的,它們在記憶體中按照這個先後順序連續存放在一起。

3、陣列元素用整個陣列的名字和它自己在陣列中的順序位置來表示。例如,a[0]表示名字為a的陣列中的第一個元素,a[1]代表陣列a的第二個元素,以此類推。

對於vb的陣列,表示陣列元素時應注意:

1、下標要緊跟在陣列名後,而且用圓括號括起來(不能用其他括號)。

2、下標可以是常量,變數,或表示式,但其值必須是整數(如果是小數將四捨五入為整數)。

3、下標必須為一段連續的整數,其最小值成為下界,其最大值成為上界。不加說明時下界值預設為1。

9樓:聽不清啊

定義int a[2][4],陣列a中的元素個數是8個行號從0~1

列號從0~3

共2*4=8個

10樓:匿名使用者

陣列的下標黙認從0開始,所以二維陣列a的元素個數為3x5=15

11樓:兄弟連教育北京總校

8個,這是個二維陣列。

定義一個4行4列的二維陣列int a[4][4]和一個一維陣列int b[4],(1)呼叫隨機函式

12樓:匿名使用者

先宣告一個二bai維陣列du

,通過雙層for迴圈zhi

進行dao輸入並輸出。

版#include

int main()

printf("\n");

}for (j = 0; j < 4;j++)printf("%5d", b[j]);

}getchar();

}結果如下所示權:

c語言中,一個二維陣列 a[5][9] 中a[4]指的是什麼?

13樓:l語言之父

二維陣列 a[5][9] 中a[4]指的是a[4][0]的地址,a[5][9]相當於有5個一位陣列每個陣列長度為9a[4]相當於第四個陣列的首地址,a[4] + 1等於a[4][1]滿意請採納,不懂請追問

14樓:聽不清啊

c語言中,一個二維陣列 a[5][9] 中a[4]指的是

a[4][0]~a[4][8]的一個一維陣列的首地址,也即是a[4][0]的地址。

15樓:匿名使用者

一群人回答, 就菜菇孃的小魔姑答對了,其他的都胡扯啊!

a[4][0]的地址跟a[4]一樣嗎?數值上是一樣了,型別呢?

int a[5][9]的話,

&a[4][0]是int *,而a[4]卻是 int [9]!能一樣嗎?

不信的話,用sizeof()看看佔用位元組數試試

16樓:醉愛女人幽香

a[4]指第五組一維陣列,意指一個指標,在數值上等於a[4][0]的地址,如圖:

17樓:康橋不再憂傷

a[4] 中存的是一個以a[4]為首地址的一個陣列

18樓:匿名使用者

a4 代表 條件取數直

c語言指標:一個二維陣列a[3][4],為什麼*a會表示&a[0][0]呢?不是【a表示&a[0]

19樓:匿名使用者

*a表示第0行第0列地址,a既是陣列名,也是第0行的首地址;a[0]表示第0行0列的地址,*是取物件,&是取地址,*a[0]才表示值

20樓:貝蠡

*a預設為第0行第0列地址

c語言二維陣列表示形式!"&a[0][0]+4*i+j;(在i行前尚有4*i個元素存在)"

21樓:匿名使用者

&a[0][0]就是a,表示的是陣列的首地址你寫的兩個方式都是錯誤的

你的意思應該是表示一個4列的二維陣列a的a[i][j]可以使用*(*(a+i)+j)望採納

22樓:林小兀

這個很好理解啊,第一個式子是取二維陣列的首地址,然後第二個便是在首地址後再偏移i*4,這樣陣列便是?*4的陣列,你自己畫個圖,每個元素按順序算下來,你就懂了

C定義二維陣列,C 定義乙個二維陣列

不是儲存到記憶體中 就是對陣列dham 3 32768 進行初始化 相當於int a 5 前面的const是說你在用到陣列的值時不能改變他的值 如果沒有const就可以改變 比如我定義的a 5 就可以改變它的元素的值 不如 你可以改變a 0 100 但是dham 3 32768 中的值你就不可以改變...

定義4行4列的二維陣列inta44和一維數

先宣告乙個二bai維陣列du 通過雙層for迴圈zhi 進行dao輸入並輸出。版 include int main printf n for j 0 j 4 j printf 5d b j getchar 結果如下所示權 定義乙個3行4列的二維陣列int a 3 4 利用陣列輸入 輸出陣列的所有元素...

VB一維陣列轉二維陣列

arrm 0,0 3 arrm 0,1 0 這個是向陣列arrm 的第0排的第0個位址賦值3和向陣列arrm的第0排第1個位址賦值0 這個沒有為什麼的,你愛高興給他賦值幾就賦值幾,就像你想給小孩幾元錢就給幾元,那是你的事。至於0,00,1是二維陣列的下標,即數學中的座標。看下圖你就明白了。就如你的a...