c語言中a1為什麼和a1等價,C語言中,a1為什麼和a1等價?

2021-03-19 18:20:35 字數 5099 閱讀 5476

1樓:匿名使用者

a[1]是陣列的第2個元素(第一個是a[0]), 所以 a[1]的地址是陣列的首地址+1,陣列的首地址也可以用 a 表示,所以 a+1是 a[1]的存放地址,所以*[a+1]=a[1]

2樓:匿名使用者

a[1]的值存在a+1這個地址中*(a+1)就是取出這個地址中的內容,他們都是同一個東西當然值都一樣

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

3樓:匿名使用者

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

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

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

4樓:匿名使用者

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

5樓:聽不清啊

c語言中,

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

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

6樓:匿名使用者

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

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

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

7樓:我是你0爸

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

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

8樓:匿名使用者

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

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

9樓:匿名使用者

注意,後者是非法的。

10樓:匿名使用者

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]

11樓:燕清揚

例如a=2;

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

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

例如a=2;

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

12樓:匿名使用者

取a的地址加1

取a+1的地址

13樓:匿名使用者

a++:a先建立自身的一個副本,然後a自增1,最後返回副本的值a+=1: 事實上相當於++a

a=a+1: 雖然有點雷同於a+=1,但不同的是此時右值的a和1做相加操作,形成一個副本然後賦值給a,所以有額外操作

++a:將a自增1並返回a

鑑於a++和++a的差別,c++primer建議用++a作為for迴圈的遞增量。

以上討論不僅限於int,還著重於對類的過載設計時的考慮。

14樓:認不倒你

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

&(a+1): 錯誤

15樓:

事實上是一樣的

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

可能執行的效率會有錯

16樓:曉呈呈

a++ 先取值再自加

++a 先自加再取值

a+=1 等同 a=a+1

17樓:匿名使用者

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

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

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

18樓:匿名使用者

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

a+1是a[1][n]

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

a就是陣列首地址地址

c語言書上說a(i)和*(a+i)等價,我覺得不對啊

19樓:金色潛鳥

注意方括號和小括號。一維二維不要混淆。

c語言 語句中,方括號 不是標點符號,而是 運算子.

c語言 語句中,有恆等式: a[i] = *(a+i)a[i][j] 等於 (a[i])[j] 套恆等式公式,化成 ( *(a+i) )[j], 再化成 * (*(a+i) + j);

類似地 a[j][i] 等於 (a[j])[i],套恆等式公式,化成 ( *(a+j) )[i] ,再化成 * (*(a+j) + i);

求地址 用 & 運算:

1 維:& (a[i]) = & ( *(a+i) ); 注意 &* 抵消, 得 &a[i] = (a+i )

2維; &(a[i][j]) = (*(a+i) + j);

2維; &(a[j][i]) = (*(a+j) + i);

******************************=2 維:

a(i)等價於&a(i)(0) --- 不是小括號,是方括號,用於2 維 下標變數時的 a[i] 等價於 &a[i][0]a[i] 是第 i 行 的 首地址,等價於 &a[i][0]

20樓:運命に抗

書上是對的,你的理解完全錯了。

a[i]並不等價於&a[i][0]。

&a[0]等價於a;

&a[i]等價於a+i

同時取值

*(&a[i])等價於*(a+1);

其中*(&a[i])的*&抵消就是你書上說的 a[i]等價於*(a+1);

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

21樓:劉文正粉絲

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

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

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

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

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

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

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

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

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

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

23樓:twinkleh丶

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

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

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

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

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

0表示列的移動

所以是1行0列的地址

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

取值二級指標是一級指標

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

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

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

24樓:tlier丿殘刀

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

c語言中的二維陣列裡a+1和*(a+1)為什麼相等?

25樓:匿名使用者

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

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

為什麼.一個陣列元素a[i]與a+i的表示等價?謝謝啦

26樓:覺悟壯志

不等價吧

*(a+i)與a[i]等價

因為可以理解陣列是特殊的地址常量

a代表a[0]的地址

a+1就是地址+1

是a[1]……

27樓:儲熠祖波

a是儲存的是陣列首地址,*a指向的就是陣列第一個元素a[0],所以*(a+i)的地址和a[i]的地址一樣。陣列和指標在一定程度上本質是一樣的。

28樓:匿名使用者

a表示的陣列首地址,指標和陣列在一定程度上是一樣的。所以a[i]和*(a+i)指向的元素是一樣的。

a[i]表示給定了陣列首地址的儲存位置a 尋找陣列中的第i+1個元素(陣列第一個元素是a[0]),而*(a+i)就直接讓指標指向陣列第i+1個元素。

29樓:靜文風

因為a即代表a[0]是陣列的首地址,所以a[i]等價於a[0]+i,即a+i

C語言中a0b0等價於什麼啊

是表來達 相等 的關係運自算符,當兩個運算物件滿足相等關係時 計算結果為真 1 是表達 不等 的關係運算子,當兩個運算物件滿足不等關係時 計算結果為真 0 是邏輯與運算子,當兩個運算物件的同時為真時,計算結果為真。在一個表示式中,關係運算的運算優先順序高於邏輯運算。表示式 a 0 b 0 等價於 a...

c語言中ab2等價於aab2還是aab

朋友,其實這種問題自己編個小程式就知道了,a b 2等價於a a b 2 可以通過下面的小程式看出來 include void main 學習的過程中需要自己不斷的摸索。所以我希望以後您能再自己遇到困難的時候動手試試,很有利於你的學習進步。望採納 a a b 2 a a b 2 等號右邊是一個整體 ...

C語言中1f是什麼意思,c語言中 1f是什麼意思

c語言裡面的數字格式,f指float,佔用位元組數4,有效數字6 7,數值範圍 3.4 10 38 3.4 10 38 這個意思是用float的格式表示數字 c語言中 1f意思是 輸出資料是浮點數,佔一位空間,這樣輸出是沒有意義的,嚴重壞疑你寫鍺了,可能是 c語言中 4.1f是什麼意思,當然數字4可...