c語言中二維陣列它的陣列名是a那a和a有什麼

2021-03-28 02:06:38 字數 4203 閱讀 9685

1樓:匿名使用者

對於二維陣列名a和*a,二者的區別在於型別不同。

對於type a[m][n];

當使用a時,可以等同於二級指標type **型。

而使用*a時,等同於type*型。

從概念上說,a表示二維陣列a的首地址,而*a表示二維陣列a第一行a[0]的首地址。這樣在使用的時候就有所區別。比如 對a的操作a[4]表示a的第四行首地址,而對*a的操作(*a)[4]則代表第一行的第4個元素,即a[0][4]。

所以a和*a除了值相同外,其它的各方面都是不同的。

2樓:匿名使用者

資料名可以看作指標常量,分配陣列空間時指標值就確定下來了,不像宣告的指標變數那樣,值是不能改變的。*a=a[0],對於二維陣列a[0]也是一個指標,他們都指向陣列的首地址,值都相等,但是,a和a[0]雖然值相等,但對他們進行指標運算時,地址偏移的基礎不同。

3樓:匿名使用者

其實不大 *a就是a[0]都是第一行的地址

4樓:匿名使用者

有無指標指向的區別。

5樓:匿名使用者

a是這個二維資料首地址,*a是第一個元素值。

c語言 二維陣列a【0】與a與a【0】【0】有什麼區別?

6樓:匿名使用者

陣列在記憶體中是連續按行分佈的,對於a[2][3]=,};它在記憶體中的分散式1,2,3,4,5,6;所以他等價於a[2][3]=;在c/c++中,陣列名也即是陣列首地址,這裡加入a=0x1000;那麼它的地址分就是也就取第一個元素的地址,即1000,a[0]是第一行1000,1004,1008的首地址,也是1000,也即是a元素的首地址;

int *b=a[0];

*b和a[0]是等的,是a陣列第一行首地址;不同的是a[0]是隻讀的,*b是可讀寫的因為b是指標變數,你可以試試a[0][3],a[0][4],a[0][5]都能列印出來,別看a[2][3]以為這樣越界了,其實越不越界是按地址來算的,地址上講,&a[0][3]=a[1],所以完全沒問題;按照地址計算上面列印的值就是4,5,6;同理用*(b+3),*(b+4),*(b+5)也是一樣的道理;

a就是陣列的首地址,a[0]是第一行第一個元素的首地址,也即是a的首地址,&a[0]是第一行的首地址,從數值上將,沒問題,只是資料型別上不一樣;

a[0][0]就是取第一行第一個元素的值,也即是1

7樓:匿名使用者

a[0][0]是值,a[0]和a是地址

c語言中二維陣列的引用和地址有什麼區別嗎?比如a[i]地址&a[i],a+i,p+i,引用a[i],*(a+i)(這不應該是地址嗎

8樓:焚書煮麵帥

你這種情況比較複雜!一個陣列

名本身是一個常量地址,比如陣列a[10],a就是該陣列在記憶體分配空間的起始地址。要引用陣列中各個元素。a[i]是陣列專用的方法,它本身就是指a往後偏移i個長度記憶體空間裡存放的內容,因此用&取地址就變成了該內容對應的地址;也可以用*(a+i),a+i指從地址a偏移i個長度(此長度不是位元組,取決於陣列儲存的元素型別)的地址(注意此時它不是指裡面的內容),因此加上*以取到裡面的內容。

也就是說a[i]指內容,因此可以用&取其地址;而a+i指地址,因此可以用*取其內容,二者形式不同,都可以一樣用。

我是這樣理解的,僅供參考。

c語言中,陣列名的前面加*, 如a[3][4]; *a輸出的是什麼結果

9樓:花兒朵朵

由於a[3][4]是個二維陣列,陣列名是陣列的首地址,也是一維a[3]的首地址,也是一維第一個元素a[0][0]的首地址,因此a a[0] a[0][0]三個的地址是相同的,那麼*a在這裡代表什麼呢,*在這裡代表的是取值符,而不是指標符號,由於a是個二維陣列,*a代表的是取第一維的首元素,而這裡一維裡的元素本身又是一個一維陣列,因此在a的第一維中是存放著三個一維元素的首地址,顯然*a取到的就是第一維裡第一個元素的首地址了,*(a+1)就是取到第一維裡第二個元素的首地址了,你可以建一個一維陣列int arr = 測試一下,在一維陣列中,*arr代表的就是取第一個元素的值,它的值是個int型數值,也就是第1個元素1,而二維陣列中的a[3]裡存放的是三個元素(3個一維陣列)的首地址,因此得出一個結論,二維陣列裡的第一維就是一個指標陣列,每個指標指向三個元素(3個一維陣列)的首地址。從而**a就是取第一維裡第一個元素(1維陣列)裡的第1個元素的值。

10樓:匿名使用者

在 c 語言中,陣列和指標是可以互相交換的。

根據語言標準,*a 和 a[0] 具有大致相同的效果。

在現行標準與真正的實現中,陣列也是往往轉化位其首元素的指標來操作的。

11樓:風送來你的背影

*a是指的陣列的第一列。

*(a+1)[2] 在c語言中表示什麼意思,其中a 是一個二維陣列的陣列名,請解

12樓:

是下標為[3][0]的那個元素的值。因為的優先順序比*高,所以*(a+1)[2]被解釋為*((a+1)[2])——二維陣列a中,a是第0行的第0個元素的地址,a+1自然是第1行的第0個元素的地址,(a+1)[2]實際上就是再向後移兩行那一行的元素指標,可用*(a+1+2)=*(a+3)表示,所以是第3行的第0個元素的地址;那麼*(a+1)[2]實質上就是**(a+3),顯然,它是第3行第0個元素。比如有int a[4][4]=,,,},那麼*(a+1)[2]就是13。

行、列下標都從0起算。供參考!

為什麼c語言二維陣列a[2][2], a和*a輸出是相同的,都表示一個地址

13樓:自我程式設計

二維陣列可以理解為幾個指向一維陣列的指標組成指標陣列。

所以從型別上講,a是指向指標的指標,*a是指向一行一維陣列的指標。

但a作為陣列名,又表示了陣列首地址(在記憶體中元素地址是連續的)。

*a是第一行陣列首地址。所以值相同

(注意只是值相同,比如a[n]和(*a)[n]意義就不一樣,一個表示第n行的行指標,一個是第一行的第n列)。

14樓:天神在此

a指的是這個二維陣列第一維陣列的首地址,即&a[0] (a+1就是&a[1])

*a指的是這個二維陣列的首地址,即&a[0][0] (*a+1就是&a[0][1])

**a指的是這個二維陣列第一維陣列的首地址指向的值,也就是a[0][0]的值,不是指標

a與*a的值是一樣的,因為&a[0]與&a[0][0]是一樣的以下是地址對應關係

a等於&a[0]等於&a[0][0]

a+1等於&a[1]等於&a[1][0]

*a等於&a[0][0]

(*a+1)等於&a[0][1]

*(a+1)等於&a[1][0]

[*(a+1)+1]等於&a[1][1]

c語言指標:a為二維陣列,那a[0]是什麼型別?是指標還是陣列?

15樓:匿名使用者

a代表陣列的地址,也是陣列第0行元素的地址,是同一個值。

16樓:匿名使用者

a[0]固然是個指標,可以它是個二重指標啊,所以還有個指標存放這個指標地址

17樓:不是知道很多

a[0]是指標,

型別是int*。

a[0]是a[0][10]的首地址,a[0]=&a[0][0],a[0]每加

1移動一個int,a[0]+1=&a[0][1]a可以看內作a[3]的首地址,a=&a[0],a每加1移動10個int,a+1=&a[1],a的型別是容int(*p)[10],a是一個指標,指向含有10個元素的陣列

為什麼c語言中二維陣列的陣列名a和*a表示的是同一個值?

18樓:匿名使用者

當定義二維陣列a[m][n]時,陣列名可以認為是二維指標,其指向二維陣列的首地址。

於是a的值就是首地址的值。

而*a,就是a[0],a[0]是第一行的標記,代表第一行的首地址。

在二維陣列中,所有元素都是緊密排列的,這樣整個陣列的首地址,第一行的首地址,和第一個元素的首地址,即a, a[0], &a[0][0] 都是相同的。

於是a和*a的值是相同的。

c語言中二維陣列下標問題,C語言中二維陣列下標問題

a可以理解為二重指標,a 0 理解指標,a 0 0 是對這個地址進行訪問了 其實回 的意義 可以理解成 a i 其實就相當於 a i 所以原答來的就相當於 a i j 的優先順序比 的高 所以外面那個括號可以去掉 就變成了 a i j 明白了嗎?這裡a指的是整個陣列,而a 0 指二維陣列第一行的元素...

c語言二維陣列與指標運算,C語言二維陣列與指標運算

在 p 4 中p是指向一個有4 個int元素的一維陣列的首地址,int p 4 a就相當於int p 4 p a 兩個語句,所以 p i 指向i行地址,p i c 指向i行c列的地址即a i c int p 4 a 表示指向一維陣列 4列 的指標,然後a 0 地址給了p,p i就表示a i 的地址....

C 函式呼叫二維陣列,C語言一維陣列轉二維陣列

n如果是變數的話,陣列編譯時都通不過吧。陣列分配時必須知道大小。函式應該這樣宣告function char array 10 10 或省略第一維的大小function char array 10 function char array n n 這樣是錯誤的,陣列的索引必須是個常量表示式。如果需要必須...