c語言 已知二維陣列a,問a i與a是不是都指向陣列第i行(含零行)元素

2021-03-22 08:17:10 字數 6281 閱讀 8845

1樓:f愛問**者

不對。應該這樣,*(a+i)和a[i]的值是相等的,他們的值都是&a[i][0],即a[i][0]的位址

2樓:匿名使用者

不是的這個和二維陣列的儲存方式有關係,正確的答案應該是*(a+i)和*a[i]相當,但是不等於a[i][0],

因為二維陣列也是按照一維方式來儲存的,然後再講乙個乙個一維陣列組合成二維陣列,a+i裡面存得是第i個一維陣列的首位址,而不是陣列的第乙個值,如果要顯示第乙個值可以**(a+i)

其實畫圖一看就很容易明白,可惜現在畫不了

3樓:匿名使用者

不是,這是行指標,指向整整【i】行。這裡的i包括0。

*(a+i)的值和*a[i]的值相等,都是(&a[i][0]),即a[i][0]的位址。

4樓:匿名使用者

a[i]和*(a+i)是相等的

a[i][0]和**(a+i)是相等的

c語言中二維陣列a[i][j]中,a+i=*(a+i)=a[i]=&a[i]是怎麼理解的.

5樓:理科女

a+i=*(a+i)=a[i]=&a[i]&a[i] 和a+i是獲取i行陣列的首位址a[i] 和*(a+i)是訪問第i行的陣列望採納!!

6樓:暴躁內酷

樓主 這幾個不是相等的 其中a+i和&a[i]都是表示的記憶體位址 而*(a+i)和a[i]是取值。

7樓:匿名使用者

首先,a表示位址,a+i 表示相對於位址a偏移 i 個單位的位址,即,a + i 也是位址

a[i]表示第幾行的位址

&a[i]表示對第i行的位址再取位址。

8樓:匿名使用者

&a[i] 和a+i是獲取i行陣列的首位址

c語言中 二維陣列@a[i][j]的位址為什麼可以表示成*(a+i)+j難道*(a+i)還表示乙個位址的值?求高手詳細解釋

9樓:匿名使用者

依據《c語言深度剖析》「多維陣列與多級指標」章節 原文如下:

以陣列下標的方式來訪問其中的某個元素:a[i][j]。編譯器總是將二維陣列看成是乙個

一維陣列,而一維陣列的每乙個元素又都是乙個陣列。a[3]這個一維陣列的三個元素分別為:

a[0],a[1],a[2]。每個元素的大小為 sizeof(a[0]),即 sizof(char)*4。

由此可以計算出 a[0],a[1],a[2]

三個元素的首位址分別為& a[0],& a[0]+ 1*sizof(char)*4,& a[0]+ 2*sizof(char)*4。亦即 a[i]

的首位址為& a[0]+ i*sizof(char)*4。這時候再考慮 a[i]裡面的內容。就本例而言,a[i]內有 4

個 char 型別的元素,其每個元素的首位址分別為&a[i],&a[i]+1*sizof(char),

即 a[i][j]的首位址為&a[i]+j*sizof(char)。再把&a[i]

的值用 a 表示,得到 a[i][j]元素的首位址為:a+ i*sizof(char)*4+ j*sizof(char)。同樣,可以換

算成以指標的形式表示:*(*(a+i)+j)。

10樓:問號朵朵

表達錯誤,差1錯誤:

a[i][j]的位址應該表示為:*(a+i-1)+j-1

例:int a[3][4]; 則:

*(a):表示第一行的首位址,即:(*(a))[0],表示第一行第乙個元素位址,值為:*((*(a))[0])。

*(a+1):表示第二行的首位址,即:(*(a+1))[0],表示第二行第乙個元素位址,值為:*((*(a+1))[0])。

*(a+2):表示第三行的首位址,即:(*(a+2))[0],表示第三行第乙個元素位址,值為:*((*(a+2))[0])。

*(a+3-1)+4-1:表示最後乙個元素的位址。它的值是:*(*(a+3-1)+4-1)

11樓:陳宗權

a是乙個二維陣列,a[i]表示其中的一行,是個一維陣列,a[i][j]表示一行裡面的乙個元素。

*(a+i)就是a[i],是乙個一維陣列,當然表示乙個位址,表示這個一維陣列裡面的第乙個元素a[i][0]的位址。

12樓:涓涓細流

在這裡,*a[i]是乙個指標變數,它指向含j個元素的一維陣列。

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

13樓:處男者

你這種情況比較複雜!乙個陣列名本身是乙個常量位址,比如陣列a[10],a就是該陣列在記憶體分配空間的起始位址。要引用陣列中各個元素。

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

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

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

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

14樓:焚書煮面帥

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

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

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

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

c語言中二維陣列a[i][j],為什麼a=*a?

15樓:匿名使用者

在c語言中,二者是相同的位址值。所以可以說a=*a.

二維陣列a定義為a[i][j]時,代表一組資料,有i行j列,共計i*j的元素。

這組資料在記憶體中是連續存放的。而在c語言的使用中,a是二維陣列的首位址。*a也就是a[0],是二維陣列第一行的首位址。

所以,二者是相同的位址值,即資料a[0][0]的位址值。

也就是說,從值上,a,*a, a[0],&a[0][0]都是相同的值。

當時,說a=*a也並不是完全正確的,從型別上,a等同於二維指標,而*a等同於一維指標。二者型別並不相同,只是在一定條件下可以轉換。

16樓:匿名使用者

我理解問題中的這個=樓主是指相等,而且是數值上相等。這是肯定的。*a實際是*(a+0)+0,也即是a[0]+0這個位址,和a一樣,其數值也是這個二維陣列的首位址。

但是二者含義可不同,不能直接相互賦值。a是行指標,即a是乙個大小為i的陣列,其元素也是陣列,大小為j。*a由上面的解釋,其實質是個列指標,指向a的第乙個元素(大小為j的陣列)的第0個元素。

17樓:匿名使用者

#include "stdio.h"

main()

} 正確的寫法應該是上面這樣的。

這裡涉及到2個問題:

1.陣列宣告的時候a[9]就是有9個元素的陣列,a[10]就是有10和元素的陣列

2.陣列賦值的時候第乙個元素的下標是從0開始的,即a[0],最後乙個下標是宣告時的數字-1,如:宣告時:a[9],最後乙個元素是a[8]。a[9]是超範圍的。

18樓:

陣列名a表示二維陣列的首位址,*a就好比第一行的位址值a[0],a[0]表示&a[0][0]....

19樓:匿名使用者

二維陣列的指標比較特別,* 的作用是將行指標轉換成列指標,陣列名a是指向第一行的指標,*a則是指向第一行第一列的指標,根本含義上市不一樣的,但是值都是a【0】【0】的位址

c語言 二維陣列問題 a[i][j]中 i是列數,j是行數,那麼a[0][1]又是怎麼理解?

20樓:匿名使用者

a[i][j],i是行數,j是列數。

a[0][1]就是第0行第1列的元素。a[0][0]當然是第0行第0個元素,即陣列的首元素。

21樓:後間男孩

a[0][1]指的是第一行的第二個元素,

陣列定義的時候a[i][j], 指的是有i行,j列,但是沒有a[i][j]這個元素。 是從a[0][0]開始算起的

22樓:仙魔同殿

在陣列中都是從0開始計數的。如:a[3][4]是包含3行4列的乙個二維陣列。而a[0][0]則是表示此二維陣列的第一行和第一列的交匯點上的那個元素,即為此陣列的第乙個元素。

注意;本陣列僅有12個元素,且不可出現a[3][3],a[3][4],a[2][4]等來表示陣列的元素、、、

23樓:匿名使用者

搞反了a[[i][j]中 i是行數,j是列數,0 1 2 3 ----j

0 a b c d

1 e f g h

2 i j k l

i就是這個意思,a[0][0]=a ,a[0][1]=b,a[0][2]=c...

24樓:匿名使用者

a[0][0]:第一行第一列。

a[0][1]:第一行第二列。

……a[i-1][j-1]:第i行第j列,這是最後乙個數

25樓:刪ㄗ餘汜憶

行數和列數都是從零開始的

26樓:匿名使用者

到這裡看下,望能幫助你。

c語言中二維陣列行位址問題 :a[2][3]中a+i,a[i]和&a[i]

27樓:鷹弈

看來樓主真的是暈了~~~

用得著要特意指第幾行嗎?

就直接p = a;指向它的第一行,就行了麼如果要呼叫第一行就用p[0][i]

呼叫第二行就用p[1][i]

呼叫第三行就用p[2][i]

。。。 。。。

另外,a[1]、&a[1][0]和a+1都是第二行的首位址在二維陣列中,&a[i]什麼也不是,沒有這種用法!

28樓:匿名使用者

如果讓p指向第二行就可用p=&a[1];

a[i]不是行的首位址,而是代表行的第乙個元素,&a[i]才是它的首位址

為什麼c語言中*(a+i)+j能表示a[i][j]的位址

29樓:

int a[3][4]; //假設定義乙個3行4列的二維陣列,所謂二維陣列就是陣列的陣列

a[0]、a[1]、a[2]是陣列a的元素,而這個元素是陣列,而不是我們通常認為的基本資料型別的資料

所以*(a+i)就是獲取陣列a中第i個元素,等價於a[i],而a[i]本身又是乙個包含有4個int型數值的陣列,a[i]是這個一維陣列的陣列名,我們知道陣列名的本質是乙個位址,是陣列首元素位址,所以

*(a+i)+j就是表示下表第i行的第j個元素的位址了。所以,

*(a+i)+j表示的含義是元素a[i][j]的位址,也可以用a[i]+j來表示。

30樓:聽不清啊

int a[2][3]=;

printf("%d ",*(*(a+1)+2));

以上的引用能夠輸出60

因為a是二維陣列名,所以它是指向指標的指標(二級指標)。

*(a+1)就是a[1],它是乙個一維陣列,也是一維陣列的首位址(指向一維陣列首元素的指標)。*(a+1)+2就是a[1][2]的位址,*(*(a+1)+2)就是a[1][2]。

31樓:匿名使用者

*(a+0)取出a[0]的值

a[0]的元素又是乙個一維陣列

因此*(a+0)取出的就是這個一維元素的首位址那麼*(a+0)+0表示: 一維陣列a[n]中, a+0陣列元素a[0]的位址

*(a+0)+1表示一維陣列的1號陣列元素的位址

C語言指標與二維陣列求解,c語言中二維陣列的指標如何表示

假設a是乙個二維陣列,則一 a是第乙個一維陣列名,陣列名 就是該陣列的 首位址!二 a 0 和 a都表示這個一維陣列第乙個元素的內容 這句話有問題,應該是 都表示這個 二維陣列 第乙個元素的內容!三 a和a好像不等價啊?關於陣列名和 陣列名書上有明確的介紹與說明 a a a 0 a 0 這是規定!細...

c語言 二維陣列指標中的和,C語言 二維陣列指標中的 和

要回答你的這個問題,不妨先根據你的問題先編寫一段小的示例程式 include include using namespace std int a 3 4 int main 這段示例程式在我本地上執行的結果為 a i 0 4214816 a i 4214816 a i 4214816 a i 0 42...

c語言二維陣列a與a與a有什麼區別

陣列在記憶體中是連續按行分布的,對於a 2 3 它在記憶體中的分布式1,2,3,4,5,6 所以他等價於a 2 3 在c c 中,陣列名也即是陣列首位址,這裡加入a 0x1000 那麼它的位址分就是也就取第乙個元素的位址,即1000,a 0 是第一行1000,1004,1008的首位址,也是1000...