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]
侏羅紀公園2部的主演為什麼和1部不一樣
堵靖眭奧 電影背景是指電影的時間,地點,人物,主線等一些資訊 侏羅紀公園 失落的世界 原名 the lost world jurassic park,俗稱侏羅紀公園2 是一部1997年的科幻冒險電影,本片為 侏羅紀公園 的續集,同樣根據麥可 克萊頓的原著 改編並由史蒂芬 史匹柏執導。電影的主要場景在...
想象中的預期和現實中的行為不一樣是為什麼?急
第一 興趣不是太大 你關注時事 現在洪澇季節 很多地方發生洪災了 人員 不是很大 但經濟損失嚴重 你確定確實關心民生嗎 確定會擔心98長江再現嗎?你肯定沒有 否則你早都擔心的睡不著覺了 何來的閒著無聊打瞌睡 第二 你比較懶 不知道你是男生還是女生 不論男女 多走走還是好的 你確定你懶嗎 既然三四分鐘...
為什麼我內心的情緒和表情不一樣?不管是開心還是傷心都是同一張臉同一張表情,身邊的人也看不出來
95c3a1c承嬴 喜怒不形於色,證明你很深沉,有心機,如果有機會,可以做大事。順便開句玩笑 適合做間諜。 也許只是累了 不想表達出來而已 不想讓別人猜測 也許 這都是跟經歷有關。為什麼我的面部表情和內心情緒和心理狀態不一致?不管是高興還是沮喪在臉上都表現不出來呢? 凌茉燃 這算是一種成熟的表現吧 ...