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。 陽光上的橋 請你在草稿紙上畫一個三行 四列...