在指標中,先定義int a,則a 1和a表示行地址吧,a 1a 1 表示列地址,為什麼他們能這樣表示呢

時間 2021-09-11 22:25:28

1樓:

二維陣列可以看做一維陣列,而一維陣列中每個元素又是一個一維陣列,你可以就好理解些

a表示一維陣列中第一個元素,而該元素又是一個一維陣列,所以表示0行地址,

a+1 表示1行地址

a[1]表示一維陣列中第二個元素 ,a[1]又是一個陣列,&a[1]表示1行地址 a[1]表示1行0列的地址

2樓:匿名使用者

這個理解需要有一張圖:

a ,

a+1 ,

;要理解這些首先要建立起兩個概念:行地址和列地址,

比喻一下:行地址--就是排長;列地址就是班長,排長管班長--對行地址取值就表示列地址,班長管戰士---對列地址取值就表示具體的元素了。

這樣就好理解了:

首先分清楚一個陣列只有一個排長,然後又多少行就表示有多少班長。

a表示第一個班長,那麼a+1就表示了第二個班長,也就是屬排長管的範圍,屬行地址。

a[1],取行地址所指向的值了,就地址降級,也就是降到班長所管的範圍,也就表示具體的a[1][0]的地址了,然後再&a[1],又地址升級,就變成排長管的範圍,也就變成行地址,也就表示第1行的地址。

*(a+1):首先a+1,還是在排長的管轄範圍,表示第1行的行地址,然後出現取值符號*,地址降級,就變成列地址,就表示具體的第1行第0列的地址了。

不知道你理解沒,這個裡面還是不要去對比具體地址那樣不好理解,這樣分級理解才好理解。

若已定義:int a[5]={0,1,2,3,4},*p=a,則以下輸出結果為3的是()

3樓:自我程式設計

選b。p[3]等同與a[3]。

陣列的名字a,是表示陣列首地址的地址常量。其值就是&a[0];

*p=a;那麼p的值也是內&a[0];

p和a都表示地址容,所以*就是取地址對應的值。

(a+2)就是首地址值往後+2的地址,也就是&a[2],那麼*(a+2)就是a[2]的值2。

同理*(p+2)也是a[2]的值2。

*p[3]是不對的,p[3]不是地址是值。

注意:這裡p和a值一樣,但意義不同。p是指標值可以改變,a是常量不能改變其值。

所以p++可以,a++不行。

4樓:劉淘冬

概念:

這裡的*是指標的識別符號,*p就代表p是一個指標。

*p=a,完整的寫法應該內是,int *p=a;*代表p是一個指標,int 是指標p指向的容資料型別是int型,即整型。

因為p是指標,p=a,也就是p獲取了a的起始地址(不懂可以看看指標的定義)

*p可以理解為把指標p指向的地址裡面的數字表示出來,這裡p指向a的初始地址,a的初始地址裡放的是0,所以*p就是0,p[1]表示在p的地址上加1,因為p指向a的初始地址,也就相當於就是a的地址上加一,是a[1],所以*p[1]就是1,所以*p[3]就是3,很明顯選d

5樓:c語言基礎

&:取地址符

*:間接運算子

&變數:取變數的地址

指標[下表]等效陣列名[下表]等效 *(指標+下表)綜上所述:答案選b

c語言二維陣列與指標,我想知道為什麼*(a+1).與顯示中的a+1,所給出的地址是一樣的,怎麼理解?

6樓:

a=&a[0];陣列名相當於指標,等於陣列首地址, 型別為 int(*)[3];

*a= a[0];陣列int a[2][3];二維陣列 a有兩個子陣列,a[0],a[1] ;

有2*3 =6個int型元素 a[0][0],a[0][1],a[0][2];a[1][0],a[1][1],a[0][2];

就是說定義一個陣列int a[2][3];同時定義了 1+2+6

共九個識別符號,6個整型變數,兩個三個整型元素的一維陣列a[0],a[1] 定義為

;一個二維陣列 a;一共定義了9個名字。

*(a+1)=*(&a[1])=a[1];

a+1=&a[0]+1 =&a[1];

由於並無單獨的儲存空間儲存 a[1] 這個指標(a[1][0]的地址),所以a[1]和&a[1] 除了型別不同外,實際內容是相同的,

&a[1]的型別為 int(*)[3];

a[1]的型別為 int [3]; 也就是int* ;

實際上a,a[0],&a[0][0] 甚至&a的值都是相同的,但是型別不同

a,&a[0];: int [2][3] ==>int (*)[3]; (const ??? int (const ????*)[3])

a[0]; :int [3]==>int *; (const??? )int *;

a[0][0]; : int;

7樓:匿名使用者

a是雙下標變數,相當於定義是int **a; a存放著這個二維陣列的首地址,由於是二維陣列,

a+1實際上是地址a+3*sizeof(int),(其中的3對應著定義int a[2][3];)也就是a[1][0]的首地址

所以*(a+1)還是一個指標,與&a[1][0]是一樣的,a+1是指標,運算結果與前者相同。

8樓:匿名使用者

二維陣列是兩層指標,這個你該明白

*(*(a+i)+j)這個是表示i行的第j個資料,注意啊,是兩個*要是不理解,記住套用即可

一個*是指標

所以ij都是指標

a+1是一個指標,表示第1行的首地址(c中陣列時從0開始計數的)在二維陣列中,

a,a[0],&a[0][0]這三個指標雖然都是a的首地址的值,但是在c中用起來是不一樣的

a表示二維陣列的首地址

a[0]表示第0行的首地址

&a[0][0]表示第0行的第0個元素的地址

9樓:未來需努力點綴

樓主你好

你這裡的a是陣列名

陣列名a是陣列a[2][3]的首地址 也就是a[0][0]的地址那麼a+1就是a[0][1]的地址 *(a+1)對應的就是a[0][1]

希望能幫助你哈

10樓:楊復興

×(a+1)是一個指向 指向(a+1)所以它和a+1的地址是一樣的

若有定義:“int a[9], *p=a”,則不能表示a[1]地址的表示式是()。

11樓:有了三分的威少

答案選c.

因為a是地址,地址是常量,常量不能當做自增自減運算子加或減

12樓:

陣列名是一個指標常量!不能被改變和賦值!c錯。不管是a++還是++a都不可以。

13樓:匿名使用者

c.a++ a++表示的內容起始還是和a相同,此處還是表示a[0]的地址

14樓:420妙妙

是c,因為指標指的是地址,指標變數是指用於存放地址的變數,可以通過指標變數可以訪問它所指向的變數,題目int a[9], *p=a算是初始化p,也就是對指標變數的初始化,使p指向變數a

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

15樓:劉文正粉絲

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

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

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

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

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

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

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

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

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

16樓: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個位元組。

17樓:twinkleh丶

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

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

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

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

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

0表示列的移動

所以是1行0列的地址

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

取值二級指標是一級指標

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

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

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

18樓:tlier丿殘刀

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

若有定義 int a[3][4],b[4][3],(*p)[4]; 下列賦值等式正確的是 答案是 p=&a[1] p=b為什麼錯

19樓:匿名使用者

(*p)[4]的意思是:p是一個指向具有4個int型別元素陣列的指標。

a[3][4]有3行,每行的元素有4個

b[4][3]有4行,每行的元素有3個

所以 p=&a[1]是對的,讓p指向a的第二行的四個元素,因為a的每行有四個元素,這與p的定義恰恰是匹配的。

若已定義int a,則表示式a 10,a 10,a 的值為

答案為10。解題過程如下 a 10,a 10,a 是一個逗號表示式,逗號表示式的規則是什麼第一表示式計算起,直到計算最後一個表示式,最後一個表示式的值是逗號表示式的值。先計算a 10,值等於10,變數a也被賦10的值。再計算a 10,的值為20.最後計算a 得值為10,a得值為11.但整個表示式的值...

已知定義int a 2,則表示式a a a a a的值是

這個表示式無意義,編譯器會給出警告資訊。該表示式的值與編譯器相關 非要執行,看一下這句在gcc給出的反彙編 0x401476 mov eax,0x1 0x40147b sub eax,dword ptr esp 0xc 0x40147f mov edx,dword ptr esp 0xc 0x401...

若有定義 int a則表示式a a的值為9請高手說明下這個過程

倒黴熊 二維陣列是按行儲存的也就是如下這樣 a 0 0 a 0 1 a 0 2 a 0 3 a 1 0 a 1 1 a 1 2 a 1 3 a 2 0 a 2 1 a 2 2 a 2 3 而a表示的就是a 0 0 所在的地址。所以 a 2 1 a的值為9。 陽光上的橋 請你在草稿紙上畫一個三行 四列...