在二維陣列裡地址a和地址ai的問題

2021-03-05 09:21:58 字數 4324 閱讀 9952

1樓:徐青峰

a[i]和*(a+i) 表示bai

的是同一個地址,對於陣列來du說,計算zhi機計算地址都dao是以*(a+i)進行計算,也就是換算內成指標的形式.

對於容二維陣列,你要搞清楚所取的地址是對誰而言的.很顯然,a[i]是第i行的地址,這是相對於行而言的,也就是說,a[i+1]就是下一行的地址了.

&a[i]是不一樣的,首先,a[i]是一個常量,不同的只是它只是一個地址,而&a[i]只是取這個常量的地址的實體地址,也就是實體記憶體中的真實地址.你可以用輸出函式輸出一下看看.

二維陣列裡,a[i]是一個陣列的首地址."&"是求地址的,&a[i]。。求一個地址的地址,還是地址。。一樣的東西。

a[i] 是地址,(a+i) 是個常量了,我們把他宣告成指標讓他來指向它不就可以拉 *(a+i) .

2樓:小花朵

a[i]是行地址,這句話比較合適,因為對於你的 問題來說只是一維陣列,而對於多維陣列來說,就更準確,c語言裡陣列是按行儲存的。

3樓:

a[i]是一個陣列中行地址為i的變數

&a[i]是這個變數的實體地址

*(a+i)是一個指標,指向行地址為i處的變數值

4樓:匿名使用者

這個問題你可以這麼理解,首先2維陣列的每一行的地址是存放在一個陣列中的,這個數專組的首地址是a,那麼第屬i行的起始地址就是a[i],其實在計算機中,a[i]就是當*(a+i)來解釋的。

你的第2個問題,這裡主要是編譯起解釋的問題,他解釋的時候就是把&a[i]解釋為a[i].你會發現其實a+i就等於a[i];這種問題你也也可以上網去搜下,很多的。

5樓:匿名使用者

二維陣列裡,a[i]是一個陣列的首地址."&"是求地址的,&a[i]。。求一個地址的地址,還專是地址。。一樣屬的東西。

a[i] 是地址,(a+i) 是個常量了,我們把他宣告成指標讓他來指向它不就可以拉 *(a+i) .

6樓:匿名使用者

a[i]和*(a+i) 表示的是來同一個地址,對於源陣列來說,計算機計bai算地址都是以*(a+i)進行計du算,也就是換

zhi算成指標的形式.

對於二維數

dao組,你要搞清楚所取的地址是對誰而言的.很顯然,a[i]是第i行的地址,這是相對於行而言的,也就是說,a[i+1]就是下一行的地址了.

&a[i]是不一樣的,首先,a[i]是一個常量,不同的只是它只是一個地址,而&a[i]只是取這個常量的地址的實體地址,也就是實體記憶體中的真實地址.你可以用輸出函式輸出一下看看.

c語言中二維陣列*(a+i)的意義

7樓:

*(a+i)——二維陣列第i行(從0起算)第一個元素的地址。

8樓:匿名使用者

所謂*(a+i)等價於a[i],而a[i]是一個陣列名,那麼a[i] = &a[i][0],陣列名等與首元素的地址

二維陣列中,a+i表示第i行的地址,那為什麼*(a+i)也表示第i行的地址。

9樓:鈄運旺登子

二維陣列每行的首地址分別為a[0],a[1]……a[i],*(a+0)是a[0],*(a+1)是a[1]……*(a+i)是a[i]。a+i是地址,但不代表第i行的首地址a[i]。

10樓:匿名使用者

a+i和*(a+i)的值相同沒錯,但它們的型別不一樣,代表的意義也不一樣。a+i還是2維指標,*(a+i)則是一維指標。編譯器對它們的解析和操作是不一樣的。

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

11樓:匿名使用者

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

12樓:匿名使用者

你內個說法有點錯誤

c++二維陣列指標中

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

13樓:匿名使用者

不是的,給*p賦值,並不是直接賦給它數值,而是賦給他一個地址,比如說:*p=&i,那麼就給*p賦給了i的記憶體地址,系統在讀取到記憶體地址之後再讀出該記憶體所存的數值,而*p的記憶體地址等於i的記憶體地址,所以*p的數值與i的數值是一樣的,雖然 在賦值語句之後,*p等價於i, 但是不能說直接把數值賦了*p。*p=&i的含義是變數i的地址作為一個資料存放在指標變數p所對應的記憶體單元中。

c語言中a+i是地址嗎,書上說a+i是a[i]的指標,既然這樣,那麼*(a+i)為什麼還是

14樓:

a+i其實就是&a[i],肯定是地址

*(a+i)其實就是a[i],如果a是二給陣列的陣列名,a[i]就肯定是地址(等同於&a[i][0]),如果a只是一維陣列(指標陣列除外)的陣列名,a[i]就不是地址(原因是:二維陣列可以看作是多個一維陣列組成,即陣列的陣列)

*(a+i)+j就是&a[i][j],如果陣列a是二維陣列那就肯定也是地址啦

a[i][j]則是表示為*(*(a+i)+j)

15樓:匿名使用者

a應該是指的陣列名字吧

你首先應該知道陣列名字本身就是地址了

a+i是說a的地址向後在移動i個位置

也就是a[i]

a是指的陣列的首地址,開頭的位置

*(a+i) 也就是*a[i] 也就是a[i]的地址,只是這個地址離首地址偏移了i位置

再加上j 就是 a[i][j]地址

*(a+i)+j是針對二維陣列來說的,也可以說是特殊的一維陣列。

16樓:賽罡諫陽澤

是地址,你要取值是要*(

*(a+i)+j)的

*(a+i)其實就是a[i][0]的地址

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

17樓:理科女

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

18樓:暴躁內酷

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

19樓:匿名使用者

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

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

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

20樓:匿名使用者

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

二維陣列中,二維陣列第i行的首地址為:a[i],*(a+i)。請詳細說明一下這兩個怎麼來的。看不懂。大俠門多謝

21樓:匿名使用者

a[i] 與 *(a+i) 的作用一樣

陣列是一片相鄰的記憶體地址

a是儲存陣列的首地址

*(a+i) 就是地址的操作

a[i] 就是用 operator 把上面那個定義成符號

22樓:目標月薪

例如:int a [ i ] [ j ];

a[i] 等於&a[i][0]

*(a+i) 等於&*(*(a+i)+0)

求問大神,指標為什麼&(*(a+1)+2)出錯,&*(a+i)表示第i行首地址,為什麼加了列以後卻報錯

23樓:匿名使用者

前提是來a是一個二維陣列吧

a+i 表示的是源表示第i行首地址,

*(a+i)表示第i行首元素的地址

在 &*(a+i) 也就是 &(* (a+i) ) 中,&和* 相當於相互抵消了。

而 &(*(a+1)+2)出錯,是因為這個類推並不對應。要對應的話,見下圖

int i=1,j,x,y,z,w;

char a[3][80], *p,(*pp)[80];

pp = a+i;

pp = &(*(a+i));

p = *(a+1)+2;

p = &(*(*(a+1)+2));

上面的表示式都是沒有問題的;

24樓:匿名使用者

因為*(a+1)+2的結果是一個常量,不能再用地址去指向。

二維陣列a中,為什麼a1是地址

a相當於是a 0 0 的地址 不是的,a 1是地址,a 1 是取a 1這個地址的值a 1是a 0 1 的地址 a 1 相當於是a 0 1 所以輸出2 對,是地址,a i 是第i行的首地址 其實你那個是簡化了,嚴格的來說應該這麼寫 printf d n a 1 0 c語言中的二維陣列裡a 1和 a 1...

在C中怎麼給二維陣列賦值

string其實就是char陣列,讀的時候傳入的只是這個char陣列的首地址.比如 str 256 scanf s str 那麼對於string陣列來說也是一樣 比如你說的 s 10 20 對於這個2維陣列的10個string的首地址就是s 0 s 9 所以讀的時候可以用一個迴圈 for i 0 i...

關於二維陣列指標的問題

其實這是c在實現多維陣列時的魔術而已,實際上a就是一個12個int的資料區。你在寫a 1 2 時編譯器實際上知道這個陣列一行是4個元素,所以計算它的地址為a 1 4 2,即a 1 2 就是 a 1 4 2 另一方面,編譯器允許使用形如a 1 這樣的表述,由於它知道a是一個定義為a 3 4 的陣列,所...