1樓:
&a[0]++;是錯誤語句,編譯都不會過。因為++是後++,在執行該語句時是不計算的,所以a[0]++是個表示式而不是值,顯然用&取一個表示式的地址是非法操作!而如果是&++a[0];則是正確的,因為前++在執行&時已經計算過了:
就是先給a[0]+1,然後再取a[0]的地址。
&a[0]+1;是正確語句,因為&的優先順序比+高,所以是先取a[0]的地址再給這個地址+一個元素所佔位元組數——就是說&a[0]+1是a[1]的地址。
2樓:匿名使用者
&a[0]++表示程式執行時會對執行結果自加1
&a[0]+1表示程式執行時對結果加上1,如果改為2就會加上2
3樓:一輩子朋中
他們的結果一樣,都是a[0]的地址加一
4樓:百度使用者
a[0]表示陣列a 的第一個元素,
&a[0]是取a[0]在記憶體中的地址
&a[0]++是將a[0]在記憶體中的地址向前移動一個單位.
理論上&a[0]+1和&a[0]++的執行效果是差不多的
5樓:匿名使用者
不一樣!
++的優先順序比&高,&比+高!
所以&a[0]++是進行a[0]=a[0]+1之後,在取a[0]的地址
而&a[0]+1是先取a[0]的地址,然後將指向這個地址的指標(假設int *p;p=&a[0];)移動一個資料長度,即指向了a[1];
&a[0]++
就是&a[0]+1就是
6樓:匿名使用者
這要看你要說的是
一維陣列還是二維陣列了,如果是一維,答案同atchoo,要補充的是,向前移動的是陣列資料型別所佔的記憶體空間,比如是int,就移動2個單元;如果是二維,
a[0]表示第一行首地址,&a[0]表示第一行第一列首地址,&a[0]++就是把第一行第一列的元素加1.
7樓:匿名使用者
有人說a = a + 1;比a++;慢,但現在的編譯器結果是一樣的.
8樓:信培勝戊衣
編譯錯誤如下,都是取得陣列a的第二個元素的地址&a[0]++與&(a[0]++)等價:6,無法編譯通過,不能取得地址;
表示a[0]++不是一個左值:
non-lvalue
inunary
`&'.cpp:
main。
而&a[0]+1與a+1和&a[1]是等價的
c語言a[0]++是什麼意思
9樓:小夏在深圳
a[0]++也就是陣列中第一個值+1再存放到原位。
比如:int a[2];
其中a[0]=1; a[1]=5;
a[0]++以後,a[0]的值變為2。
&a[0]++是錯誤語句,編譯都不會過。因為++是後++,在執行該語句時是不計算的。a[0]++是個表示式而不是值,顯然用&取一個表示式的地址是非法操作。
&a[0]+1是正確語句,因為&的優先順序比+高,所以是先取a[0]的地址再給這個地址+一個元素所佔位元組數——就是說&a[0]+1是a[1]的地址。
擴充套件資料源**如下:
#include "stdio.h"
main()
10樓:銀月惡魔_仙劍
可以自己試著編個程式,執行一下,如:
#include
void main()
;printf("%d\n",a[0]++);
return 0;
}程式執行到a[0]++的時候,a[0]=3;
等到所有語句執行完後,a[0]=4。
11樓:匿名使用者
#include
int main()
;printf("%d\n",a[0]++);
return 0;
}結果是3 雖然我感覺是4.。。。不過很可惜
12樓:匿名使用者
變成a[1]=3
一個變數 後加上++ 比如a++ 就是自己加1
13樓:匿名使用者
a[0]++是這次命令後值加1,應該是a[0]=4
14樓:磊無敵
我同意樓上說的,其實你把**執行一下不就知道了
c語言中,&a+1和&(a+1)的區別是什麼
15樓:匿名使用者
語句中,b = *a+1 -- 指標a 指向的數值加1,*a 是數值, b 等於 那個數值 加 1。
或 把a看成陣列元素 b = a[0] + 1;
*(a+1) -- 指標 (a+1) 指向的數值b = *(a+1) -- 可以看成陣列元素 b = a[1];
16樓:匿名使用者
a是指標?是的話,&(a+1)就是a指標指向的地方+1(型別)的位置;若是指向的是陣列的話,&a+1就是增加整一個陣列的地址了。比如int b[8],*a=b,&a+1就是增加4*8=32個位元組了。
17樓:聽不清啊
c語言中,
"a"佔2個位元組,一個'a'和一個'\0'(字串結束符),它是一個字串。
'a'就只佔一個位元組,即單個字元'a',它是一個字元。
18樓:匿名使用者
c語言為了使寫法更方便,單條語句更簡短,增加了縮寫形式。
這兩種方式是一樣的,沒有任何區別。
除此之外,還有a *= 1,a %= 1,只要是操作符都可以。
19樓:我是你0爸
呃,,,樓上的各位都沒有答到本質上 從本質上講,「a」是一個指標常量,而'a'則是一個數值。也就是說,在編譯器看來,「a」的值是一個地址(比如:0x84f39ea0),而'a'的值則是a的ascii碼(即97)。
樓主用printf列印這兩個值看看就知道了 另外,當「」裡的字串有多個字元時,它指向字串的第一個字元。
20樓:匿名使用者
&a+1是a的地址加上1,&(a+1)是(a+1)的地址
&是地址運算子和引用運算子
21樓:匿名使用者
注意,後者是非法的。
22樓:匿名使用者
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]
23樓:燕清揚
例如a=2;
a++;輸出結果為2;但是記憶體中它的值自加1了。(先輸出a再運算)例如a=2;
++a;輸出結果為3;記憶體中也是3.(先運算a再輸出值)。
例如a=2;
a+=1;意思等同於a=a+1;
24樓:匿名使用者
取a的地址加1
取a+1的地址
25樓:認不倒你
&a+1 :a的下一個位置的指標
&(a+1): 錯誤
26樓:
事實上是一樣的
a>>=1的意思就是a>>1並賦值給a;
可能執行的效率會有錯
27樓:曉呈呈
a++ 先取值再自加
++a 先自加再取值
a+=1 等同 a=a+1
28樓:匿名使用者
這裡的a=&a[0][0];
a+1=&a[1][0],也就是過了一個a[0][1],因此是加了8個位元組
&a+1是跳過整個陣列的地址,也就是加了16位元組
29樓:匿名使用者
a是相當於a[0][n]
a+1是a[1][n]
n是幾就差n*4個位元組嘍
a就是陣列首地址地址
c語言 *p=&a[0][0] 這是什麼意思啊? 如果後面還有*p+1;呢
30樓:匿名使用者
p是個指標,指向的地方被賦值為a[0][0]的地址,所以p應該是個二維指標例如
int * q;//相當於&a[0][0]int** p=&q ;
*p=q;
後面的*p+1值就是&a[0][1]
31樓:洛雨
就是把p指向a[0][0]的地址,*p+1,根據優先順序,其實是(*p)+1,相當於a[0][0]+1
在c語言中0和n都是什麼意思,在C語言中 0 和 n 都是什麼意思?
轉義字元。1 0其實就是0,字串存入字元陣列的時候最後一個字元作為字串的結尾回。告訴計算機,答 這個字串結束了。2 n是回車換行,挺長用的。比如 printf d n a 就會輸出a的值以後,自動換行。putchar n 輸出一個回車。其它的你可以瞭解一下 t,相當於一個很大的空格。根據你的補充提問...
在c語言中0x01和0x1相等嗎
include int main 這是測試程式 列印的結果i j是相等的 說明兩者相等 c語言中0x01 9,和0x01u 9得到的結果一樣嗎,是都為0嗎 在c語言中,可以用 bai作取du地址和按位與操作兩種運算zhi。不過取dao地址是針對變數的,內當前 後是一容個常量,在c語言中不允許取地址操...
在C語言中,執行mainint a 1,b 2,m 0,n 0,k k n bam a b printfd,d n ,k,m執行時警告
n b a m a b 由於這是或,也就是說只要 前面為真,後面就不會執行了。因此會有這樣的警告。與 邏輯或跟與 抄 有部完襲 全運算的,比如在左邊的表達bai式可以決定怎麼個du式子的值時zhi,右邊一個表示式講不在dao執行。例如 表示式1 表示式2 當表示式1等於1時,就不在計算表示式二,會警...