1樓:佼赫然閎竹
這好解釋啊,因抄
為++是後++,要等襲到把(*--p)的值賦給y後(*--p)的值才會增1。所以結果是y=1,a[0]=2。你可以用下面的**驗證:
int main(void),y,*p=&a[1];
y=(*--p)++;
printf("%d %d\n",y,a[0]);
return 0;}
c語言 定義則執行y=(*--p)++後,y的值是
2樓:
這好解釋啊,因為++是後++,要等到把(*--p)的值賦給y後(*--p)的值才會增1。所以結果是y=1,a[0]=2。你可以用下面的**驗證:
int main(void),y,*p=&a[1];
y=(*--p)++;
printf("%d %d\n",y,a[0]);
return 0;}
c語言:已有定義int x=3,y=4,z=5;則表示式 !(x+y)+z-1&&y+z/2的值是?
3樓:
答案是1。
涉及到的運算子: ! () + - && /運算子優先順序為:() ! / + - &&運算過程:
x=3,y=4,z=5
!(x+y)+z-1&&y+z/2
!(3+4)+5-1&&4+5/2
所以表示式計算步驟為
!(3+4)+5-1&&4+5/2 -> !7+5-1&&4+5/2!7為 0
-> 0+5-1&&4+5/2
5/2 整數除整數得整數 2
-> 0+5-1&&4+2
-> 4&&6
邏輯運算 &&
擴充套件資料c語言運算子的優先順序:
如果同一優先順序的運算子,結合次序由結合方向所決定。
4樓:匿名使用者
只是等於1的,我是經過turbo c2.0編譯過的,答案應該沒什麼問題的,程式是:
main()
答案為什麼會等於1呢?那是因為運算級別的問題,根據運算級別,實現算括號裡面的先,所以程式就變成!7+z-1&&y+z/2;
然後就算!運算,由於7是大於1的,也就是真,所以!真就是假,也就是0,所以函式就變成0+z-1&&y+z/2;
然後再算除號的,由於你這裡兩個都是整形的,所以小數點後面的數忽略,所以就變成0+z-1&&y+2;
接著計算加減運算,也就是變成4&&6;
因為4和6都是大於1的數,所以就是真,由於&&兩邊都是真的話,輸出的就是真,所以結果就是1。
要是還有什麼不明白的話,就mm我吧!嘻嘻~~~~~~
5樓:匿名使用者
1優先順序: 算數》條件》關係》賦值
關係中的優先順序: 非》與》或
6樓:匿名使用者
1,把運算子優先順序搞清楚就好了
7樓:匿名使用者
x等於y加4。四家外加1+3+5+4+1等於三五+4+5+1。
8樓:匿名使用者
!(3+4)+5-1&&4+5/2
=!7+4&&4+2
=!11&&6
所以說那個式子的值是:不是11並且是6
在c語言中,已知定義:int b[]={1,2,3,4},y,*p=b;執行y=*p++後,y的值為( )。求過程
9樓:匿名使用者
*p++等效於*(p++),是 先引用後自增,p原先指向b[0],所以y的值為b[0],y=1;p後加1,p指向b[1]
另外b[0]值還是1沒變
10樓:
1樓的回答是copy
錯誤的,執行*p++後並不會修改陣列b中的任何值,執行y = *p++,++的優先順序要高於*,所以等價於y = *(p++),由於初始化時p指向b[0],由於++後置,所以p++在執行*操作時仍然是指向b[0],執行完成後才增加,指向b[1]。因此,*p++ = b[0] = 1。
執行完成後,*p = b[1] = 2,這裡只修改p的值,只是取出陣列b中的值,並不會修改陣列b中的任何值。
11樓:匿名使用者
執行這句y=*p++;時,p指向陣列b的首地址,也就是b[0],由於++是後置,所以y=自增之前的b[0],y的值為1,執行之後b[0]為2;
c語言……….若有定義語句:int a[4]={1,3,5,7},*p;p=a;則*(p+1)的值
12樓:輕曳風鈴
*(p+1)=3
樓主追問
char s[10] = ;則strlen(s)的值為strlen是計算字串長度,遇到'\0'結束返回長度,所以是則表示式pn->b/n.a * ++pn->b的值是
pn結構體指標指向結構體n,n被初始化成
pn->b/n.a * ++pn->b
<=>pn->b = pn->b+1;
pn->b/n.a*(pn->b + 1)=3/1*2=6結構體的->運算子優先順序大於++
++這裡是前加,先加1後再使用加後的值
13樓:苓愛你無言
*p=a中的a就是&a[0],即a[0]的地址,所以*p(p+1)=a[1]的值,即為3
14樓:匿名使用者
p指向a的首地址,所以*(p+1)=a[1]=3
c語言 int a[]={1,2,3,4,5,6,7,8,9,10},*p=a,則值為3的是
15樓:馮老師(必果學院
這bai是一個指
針求du值的問題,答案zhi應該是a
答案分析如dao下:
首專先,所有的逗號屬運算子,是從左向右進行的,其值為右邊結果計算的值
a p+=2,*(p++) 先計算p+=2 再計算*p 最後計算p++ 表示式的值在第二步計算確定的 為p[2] = a[2] = 3。表示式計算完畢之後,p指向4
b p+=2,*++p 先計算p+=2,再計算++p 最後計算*p 表示式的值在最後一步確定 為4
c p+=3,*p++ 先計算p+=3,再計算*p 最後計算++ 表示式的值在第二步確定為4,而後a[3]的值變為5
d p+=2,++*p先計算p+=2,再計算*p 最後計算++ 表示式的值在最後一步確定,為4,而後a[2]的值變為4
16樓:匿名使用者
答案a.
陣列定義是a[0]=1,a[1]=2,a[2]=3, ...,a[9]=10
a. p += 2使p指向a[2], *(p++)表示先取*p的值, 然後p增加版1(指向a[3]), 所以取權得的值是a[2]=3
b. p += 2使p指向a[2], *++p表示先p增加1(指向a[3]),然後取*p的值,所以是a[3]=4
c. p += 3使p指向a[3], *p++表示先取*p的值, 然後p增加1(指向a[4]), 所以取得的值是a[3]=4
d. p += 2使p指向a[2], ++*p對*p的值增加1, 所以取得的值是a[2]=a[2]+1=4
還有一種寫法是(*p)++, 表示先取*p的值, 這個值再增加1
c語言指標問題。。 若有int a[]={0,1,2,3,4,5,6,7,8,9,0},*p=a,
17樓:匿名使用者
a: a[p-a] = a[0],即bai陣列a的第一個元素。du這裡的a沒有定義,估計應該本來是zhia吧,輸入題目的dao
時候不專小心句首自動大寫了
b: a[i]是數屬組a的第i個元素,&a[i]是該元素的地址,所以*(&a[i])是該元素的值。該項等價於a[i]
c: p[i] = a[i],即陣列a的第i個元素值d: 這個是錯誤的。*(a+i)是陣列a的第i個元素值,*(*(a+i))語法錯誤
c語言定義問題inta5intchar
指向函式的指標 typedef就是將pfun設定為函式的新型別,以後用pfun定義的變數就代表了返回值,引數型別如上的函式型別,因此用pfun a 5 就是a 5 型別的函式,說白了就是有一個陣列,陣列的成員型別是指向函式的指標。其中 int,char 分別是函式的引數型別int 說明函式返回值是指...
c語言的陣列問題,若有定義inta以下選項
選d。一個二維陣列可以被認為是一個帶有 x 行和 y 列的 下面是一個二維陣列,包含 2 行和 3列 因此,陣列中的每個元素是使用形式為 a i j 的元素名稱來標識的,其中 a 是陣列名稱,i 和 j 是唯一標識 a 中每個元素的下標。i最大值為1,j最大值為2,超出此範圍則表示錯誤。d 因為1 ...
在c語言中若有定義inta5b2c1則表示式
include include char st 110 int main int a 5,b 2,c 1 printf d n a b 表示式為假,輸內出容0 先計算 a b 然後計算b c 即 2 1 不成立,值為假。兩側都是假。結果為假。即0.a b b c 也不滿足,所以表示式a b 結果是f...