C語言二維陣列中a aa 1)代表的含義一樣嗎?如果一樣為什麼

2021-03-20 05:47:01 字數 6243 閱讀 8749

1樓:折柳成萌

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

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

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

2樓:

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

3樓:匿名使用者

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

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

4樓:理科女

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

5樓:暴躁內酷

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

6樓:匿名使用者

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

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

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

7樓:匿名使用者

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

二維陣列中*(a+i)是什麼意思

8樓:匿名使用者

在c語言中規定,陣列名代表的是陣列首元素位址。a是二維陣列的陣列名,因此,在二維陣列中*(a+i)表示的是第i+1行0列元素的位址,即a[i][0]的位址。而a+i表示的是第i+1行的首位址。

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

9樓:

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;

10樓:匿名使用者

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是指標,運算結果與前者相同。

11樓:匿名使用者

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

*(*(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個元素的位址

12樓:未來需努力點綴

樓主你好

你這裡的a是陣列名

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

希望能幫助你哈

13樓:楊復興

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

c語言中二維陣列a[i][j],為什麼a=*a?

14樓:匿名使用者

在c語言中,二者是相同的位址值。所以可以說a=*a.

二維陣列a定義為a[i][j]時,代表一組資料,有i行j列,共計i*j的元素。

這組資料在記憶體中是連續存放的。而在c語言的使用中,a是二維陣列的首位址。*a也就是a[0],是二維陣列第一行的首位址。

所以,二者是相同的位址值,即資料a[0][0]的位址值。

也就是說,從值上,a,*a, a[0],&a[0][0]都是相同的值。

當時,說a=*a也並不是完全正確的,從型別上,a等同於二維指標,而*a等同於一維指標。二者型別並不相同,只是在一定條件下可以轉換。

15樓:匿名使用者

我理解問題中的這個=樓主是指相等,而且是數值上相等。這是肯定的。*a實際是*(a+0)+0,也即是a[0]+0這個位址,和a一樣,其數值也是這個二維陣列的首位址。

但是二者含義可不同,不能直接相互賦值。a是行指標,即a是乙個大小為i的陣列,其元素也是陣列,大小為j。*a由上面的解釋,其實質是個列指標,指向a的第乙個元素(大小為j的陣列)的第0個元素。

16樓:匿名使用者

#include "stdio.h"

main()

} 正確的寫法應該是上面這樣的。

這裡涉及到2個問題:

1.陣列宣告的時候a[9]就是有9個元素的陣列,a[10]就是有10和元素的陣列

2.陣列賦值的時候第乙個元素的下標是從0開始的,即a[0],最後乙個下標是宣告時的數字-1,如:宣告時:a[9],最後乙個元素是a[8]。a[9]是超範圍的。

17樓:

陣列名a表示二維陣列的首位址,*a就好比第一行的位址值a[0],a[0]表示&a[0][0]....

18樓:匿名使用者

二維陣列的指標比較特別,* 的作用是將行指標轉換成列指標,陣列名a是指向第一行的指標,*a則是指向第一行第一列的指標,根本含義上市不一樣的,但是值都是a【0】【0】的位址

c語言二維陣列a[i][j],為什麼a[1]和*(a+1)等價啊?*(a+1)為什麼會是乙個位址?弄糊塗了,請高手解答

19樓:

*(a+1)指標取得不就是位址嗎

20樓:匿名使用者

*(a+1)是定義的指標,

因為陣列的起始位址a[0]可以用a來代替~

所以a[1]和*(a+1)是同乙個位址

21樓:

首先a代表整個陣列的首位址沒問題吧,a+1就是把位址下移,*(a+1)就是取其位址的內容。這回可以理解了吧!

在二維陣列中怎麼理解*(a+1)=a[1]?又怎麼理解&(a+1)

22樓:二分法則

*a指標,指向陣列a的首位址,即a[0]的位置,類似*(a+1)指向a[1]。他們的值是相等的,所以

*(a+1)=a[1]。&(a+1)是值在記憶體中的位址,是乙個字串。

23樓:匿名使用者

只有變數(或者叫左值)才能用取位址符號「&」,它的含義就是得到這個變數在記憶體中的位置,如果不是變數而是乙個計算的結果,那麼取位址也就沒有意義了。所以其實這種寫法&(a+1)是沒有意義的,也是不能編譯的。

c語言中,&a+1和&(a+1)的區別是什麼

24樓:匿名使用者

語句中,b = *a+1 -- 指標a 指向的數值加1,*a 是數值, b 等於 那個數值 加 1。

或 把a看成陣列元素 b = a[0] + 1;

*(a+1) -- 指標 (a+1) 指向的數值b = *(a+1) -- 可以看成陣列元素 b = a[1];

25樓:匿名使用者

a是指標?是的話,&(a+1)就是a指標指向的地方+1(型別)的位置;若是指向的是陣列的話,&a+1就是增加整乙個陣列的位址了。比如int b[8],*a=b,&a+1就是增加4*8=32個位元組了。

26樓:聽不清啊

c語言中,

"a"佔2個位元組,乙個'a'和乙個'\0'(字串結束符),它是乙個字串。

'a'就只佔乙個位元組,即單個字元'a',它是乙個字元。

27樓:匿名使用者

c語言為了使寫法更方便,單條語句更簡短,增加了縮寫形式。

這兩種方式是一樣的,沒有任何區別。

除此之外,還有a *= 1,a %= 1,只要是操作符都可以。

28樓:我是你0爸

呃,,,樓上的各位都沒有答到本質上 從本質上講,「a」是乙個指標常量,而'a'則是乙個數值。也就是說,在編譯器看來,「a」的值是乙個位址(比如:0x84f39ea0),而'a'的值則是a的ascii碼(即97)。

樓主用printf列印這兩個值看看就知道了 另外,當「」裡的字串有多個字元時,它指向字串的第乙個字元。

29樓:匿名使用者

&a+1是a的位址加上1,&(a+1)是(a+1)的位址

&是位址運算子和引用運算子

30樓:匿名使用者

注意,後者是非法的。

31樓:匿名使用者

int b[2];

int *a;

a=b; //a指向陣列b首位址,暨b[0]的位址*a + 1 // *a就是取a指向位址的值,暨b[0],所以*a+1 == b[0]+1

*(a+1) // a+1,指標+1,就是指標指向下乙個位址,暨b[1]的位址,所以*(a+1)== b[1]

32樓:燕清揚

例如a=2;

a++;輸出結果為2;但是記憶體中它的值自加1了。(先輸出a再運算)例如a=2;

++a;輸出結果為3;記憶體中也是3.(先運算a再輸出值)。

例如a=2;

a+=1;意思等同於a=a+1;

33樓:匿名使用者

取a的位址加1

取a+1的位址

34樓:認不倒你

&a+1 :a的下乙個位置的指標

&(a+1): 錯誤

35樓:

事實上是一樣的

a>>=1的意思就是a>>1並賦值給a;

可能執行的效率會有錯

36樓:曉呈呈

a++ 先取值再自加

++a 先自加再取值

a+=1 等同 a=a+1

37樓:匿名使用者

這裡的a=&a[0][0];

a+1=&a[1][0],也就是過了乙個a[0][1],因此是加了8個位元組

&a+1是跳過整個陣列的位址,也就是加了16位元組

38樓:匿名使用者

a是相當於a[0][n]

a+1是a[1][n]

n是幾就差n*4個位元組嘍

a就是陣列首位址位址

c語言 二維陣列指標中的和,C語言 二維陣列指標中的 和

要回答你的這個問題,不妨先根據你的問題先編寫一段小的示例程式 include include using namespace std int a 3 4 int main 這段示例程式在我本地上執行的結果為 a i 0 4214816 a i 4214816 a i 4214816 a i 0 42...

關於二維陣列下標越界的問題,c語言問題,二維陣列的下標越界怎麼看?

二維陣列a只有兩行,a 2 已經越界。請先給抄出明確答覆 陣列下標越bai界 解釋原因 du 首先陣列arrs 裡面包含兩個陣列,zhi長度是dao2,那麼最大的下標就是1 你的輸出語句 arrs 2 3 如果你想要輸出第二個陣列的地三個數應該是arrs 1 2 c語言問題,二維陣列的下標越界怎麼看...

C語言如何刪除二維陣列中的指定元素並將剩餘元素依次往前移動

我簡單講講操作,就不寫了,假設是乙個滿的二維陣列 遍歷二維陣列找到匹配專的指定元屬素,否則,返回無 刪除元素 a i a i 1 直到結束把最後乙個值置為空演算法很簡單,我建議你用excel畫畫 就懂了 c語言二維陣列中刪除陣列中的重複元素 簡單地統計重複元素和不重複元素,可以用1維陣列。inclu...