多維陣列int a 3a和a是相同的地址,為什麼a 1和a 1就不一樣了

時間 2021-09-11 22:33:34

1樓:

二維陣列 就是 陣列 的 陣列。把a看出一個一維陣列,那麼每個元素又是一個一維陣列。

先把a看成一維陣列,a[0] 是什麼東西先不管,那麼 a 也就是第 0  行的首地址。a + 1 就是 第二行的 首地址

*a 在這裡就是 a[0] 的地址 ,所以 *a + 1 就相當與 a[0+1] == a[1]

2樓:

多維陣列也可以當成一維陣列來處理.舉個例子:

一維陣列a[3]=,那麼a指的就是1的地址,*a便是1;

二維陣列的話,a[3][3],等同於三個一維陣列,每個一維陣列裡面又有三個元素,這三個元素我們稱之為抱團,那麼a便指的是三個抱團陣列的首地址,那麼*a指的便是第一個抱團裡面的第一個元素的地址,那麼想取得第一個抱團裡面的第一個元素的話,那就是**a了.

由上分析的話,a+1指的就是以抱團為單位的下一個地址,也就是第二個抱團的地址,(*a)+1指的是第一個抱團裡面+1,也就是第一個抱團裡面的第二個元素,於是*((*a)+1)便是2.

不知道你懂了沒呢?

比如定義一個二維陣列 int a[2][3]既然陣列名a是陣列的首元素地址, 那麼為什麼*a也是

3樓:一位網際網路從業者

二維陣列實際上也是一維陣列,只不過這個一維陣列中的元素比較特殊,每個一維陣列元素又是一維陣列。

打個比方,a[2][3]可以理解為一個一維陣列a[2],只不過a[0]a[1]元素,是一個陣列。

*a是陣列的首個元素,不是地址

4樓:弒緋

你的理解錯了,雖然在你的所說的陣列裡,a和*a確實都是地址,但是兩者是有區別的。

1、首先說a,這裡的a將你的二維陣列陣列看作兩個一維陣列:a[0],a[1](將本來每一行的所有元素看作一個整體),a指的是第0行的首地址。

2、*a,這裡是指將二維陣列看作一個整體,*a指的是這個二維陣列的第0行第0列的首地址。

c語言中的二維陣列裡a+1和*(a+1)為什麼都是地址

5樓:劉文正粉絲

二維陣列, int a[10][20];

a是一個指標的指標, 即二級指標.

一個指標加一個數, 當然還是指標(即a+1是指標)

取值一個二級指標, 是一級指標(即指標), 所以還是指標, 不過型別發生了變化.

a+1的型別為int *[10].

而*(a+1)的型別則為int *, 也就是平常的指標.

如果你學習二維陣列是用心, 你就會知道不存在二維陣列, 二維陣列其實是一個包含陣列的陣列, 即陣列的每一個元素還是一個陣列(這點有點像物件導向的思維).

所以a[0]就是取第一個元素值, 而第一個元素是陣列, 所以其值仍是一個指標.

答了這麼多, 一看問題, 發現是"地址".....地址和指標是一個東西.

6樓:zh呼嘯而過

例如a[5][10];

a + 1的值是第二行的首地址,

* (a + 1)得值也是第二行的首地址,但是a + 1不等於a[1],而* (a + 1)等於a[1]。

如果給a+1再加1,就是a+1+1,就是a+2,它的值是第三行的首地址

如果給*(a+1)再加1,就是*(a+1)+1,它的值是第二行的第二個地址

他們移動的區別:前者是縱向的,後者是橫向的。

指標型別的區別:兩者均存放為同一地址,但前者是指向一維陣列,後者是指向元素的。

實際就是前者每次跳動4*10個位元組,後者每次跳動4個位元組。

7樓:twinkleh丶

a+1應該是 (a+0)+1

這裡的a是二維陣列中的二級指標

陣列名為a[0]的一維陣列(表示行)

也是陣列名為a的一維陣列(表示列)

後面的1表示行陣列移動1行

0表示列的移動

所以是1行0列的地址

*(a+1)中a是二級指標

取值二級指標是一級指標

一級指標指向的一維陣列(二維陣列中的行)

一維陣列移動一位只能是向下移動也就是行,

所以就是 第一行的首地址 也就等於二維陣列中 第一行零列的地址

8樓:tlier丿殘刀

二維陣列又包含多個一維陣列 a指向第一個一維陣列的首地址就還是地址

在c指標的通過指標引用多維陣列中,為什麼a[0]和*(a+0)等價

9樓:匿名使用者

多維陣列中指標和一維陣列中的指標是不一樣的,以二維陣列為例來說;

int a[3][4];// 二維陣列的每一行都可以看成是一個一維陣列

陣列名a 是二維陣列的首地址

a+0 也是二維陣列的首地址,也可以看成是二維陣列行下標為0那行的首地址

a+1 是二維陣列行下標為1的那行元素的首地址a+2 是二維陣列行下標為2的那行元素的首地址a[0] 是第0行的首地址,也是第0行第0列的地址a[1] 是第1行的首地址,也就是第1行第0列的地址a[2] 是第2行的首地址,也就是第2行第0列的地址*(a+0) 這裡的*號不是取內容符號,根據一維陣列和指標的關係,*a(+0)指標a[0]的另一種表示方式,

「對二維陣列a[3][4],a+1與a[1]都是陣列第二行的首地址」是錯的,為什麼呢

10樓:匿名使用者

型別的問題。

a+1是個地址沒錯,因為陣列名被自動轉換為地址並參與+運算;

但a[1]是個一維陣列物件,你用sizeof對比一下它們兩個就知道了。

11樓:匿名使用者

a+1是第二行的首地址 它指向第二行,如果是(a+1)+1則指向第2行(從第0行開始數),a[1]指向第一行的第0個元素,指標指向列,a[1]+1則表示第一行的第一列元素(行和列都是從0開始)。

*(a+i)與a[i]與(a+i)是一樣的地址,為什麼? 10

12樓:匿名使用者

呵呵,你錯了,對於陣列a[i],a表示該陣列的起始地址,即a=&a[0], 所以 *(a+i)表示a+i指向的陣列元素,*(a+i)=a[i]。

對於二維陣列,&a[0][0]就不能用a表示了,而是用a[0]+0表示,二維陣列可以看成一維陣列,不過它的每一個陣列元素又是一個一維陣列,比如a[3][4]的第一行元素a[0][0],a[0][1],a[0][2],a[0][3]可以看成是一維陣列a[0]的4個元素,即把a[0]看成一個陣列名。故二維陣列a[i][j]的地址可以表示成a[i]+j或

*(a+i)+j。再懂了吧。

13樓:

不好意思 我都3年沒搞c了

忘了~~~呵呵

14樓:冀來福鳳燕

*(a+i)與a[i]是一樣的地址應該是說他們指向的都是同一個記憶體單元,也就是說*(a+i)指向的值的地址,與a[i]指向的值的地址都是一樣的。也就是說他們得到的值是一樣的。

這裡不是說他們得到的是一個記憶體變數的地址還是記憶體變數的值,只是說明他們是一樣的,得到的值一樣,換句話說就是一樣的地址。(一樣的地址難道值會布一樣??)

15樓:巨集鬱米含靈

這麼說吧,*(a+i)與這個地址存的引數等效,*的意思是根據指標這個地址調出這個地址上的值。那麼,說是地址也沒有錯,只能說不是很嚴謹。

16樓:匡逸完玉韻

你內個說法有點錯誤

c++二維陣列

指標中a+i

表示陣列a的第i行第0列元素的地址

*(a+i)表示陣列a的第i行第0列元素的值估計你內個是書上印錯了,教科書各種錯,例題**也各種錯,你得自己根據定義去理解,它只是說個大概意思

17樓:薊精雀安琪

不是的,給*p賦值,並不是直接賦給它數值,而是賦給他一個地址,比如說:*p=&i,那麼就給*p賦給了i的記憶體地址,系統在讀取到記憶體地址之後再讀出該記憶體所存的數值,而*p的記憶體地址等於i的記憶體地址,所以*p的數值與i的數值是一樣的,雖然

在賦值語句之後,*p等價於i,

但是不能說直接把數值賦了*p。*p=&i的含義是變數i的地址作為一個資料存放在指標變數p所對應的記憶體單元中。

c語言中的二維陣列裡a+1和*(a+1)為什麼相等?

18樓:匿名使用者

它們只是值相等,但型別不相等,不能說它們相等。

a+1是int **型別,指向的是陣列a的第二行的起始地址; *(a+1)是int *型,指向的是陣列a的第二行第一個元素的地址。

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

19樓:匿名使用者

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

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

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

20樓:聽不清啊

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

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

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

C求解釋,「int a 3 p a 輸出p的值是什麼,是a的地址,還是等於

int a 3 p a 這語法寫錯,可能 int a 3,p a 但仍是不對的,p的指標值送入3顯然也是不對的。估計是 int a 3,p a 要把題目搞清楚。 應該是int a 3 p a 輸出p的值是a的地址,代表取地址。int a 3 p a 輸入有誤第一句完是 號,p a沒有這樣的運算表示式...

問比較特殊的整型陣列問題(雖然是隻有3行的C語言程式,可是卻不簡單)

scan的第二個引數是儲存輸入的 地址 是不是指標指向的地址或是某個表示式的值是無關的,極端的情況你可以直接賦值常數比如0x01這樣scan會把值存入記憶體的0x01處,a i 這個表示式的值就是這樣一個地址,至於這個地址是怎麼賦給scan的 用指標?直接賦?scan根本不考慮.在c中陣列名其實就可...

體迴圈和肺迴圈的相同點是

科普小星球 1 迴圈的系統都是封閉的,且兩個系統是連通的。2 都需要能量供給。血液的流動是需要能量的,這些能量主要是心臟搏動產生的。心臟是血液迴圈的動力器官。3 體迴圈和肺迴圈的迴圈路線都是起於心髒又匯合於心髒,都是由心室收縮攝血進入動脈,迴流至心房。擴充套件資料 體迴圈和肺迴圈的不同點有 1 路線...