❶ 在c語言裡面,大括弧裡面的自增符號,是先自增完再使用數值,還是
自增運算符後綴,表達式值為操作數的原值,最後的副作用是操作數的值+1
自增運算符前綴,表達式值為操作數的+1後的值,最後的副作用是操作數的值+1
❷ C語言自增自減運算符用法
C語言的前置++和後置++,稱為自增運算符
前置--和後置--稱為自減運算符,下面以自增運算符的區別來加以介紹,自減類似
如果單獨寫 自增運算符為一個語句,二者沒有區別
++i; 和 i++; 都是讓i+1賦值給i
但是如果把自增運算符寫入到另外表達式中二者就有很大區別了
例如
i=5;
j=i++;
執行後i為6,j為5
i=5;
j=++i;
執行後i為6,j為6
❸ c語言中的自加問題:q=(++j)+(++j)+(++j)
驗證就是22.想了一會,發表下自己的看法。
我覺得多個自增在一起,只允許配對原則。
也就是說每次只有兩個自增的時候才能滿足先算括弧;
先說q=(++j)+(++j)+(++j)=((++j)+(++j))+(++j)
此時第一個和第二配對,先算括弧自增,j=7,在求和為7+7=14。
此時就是14在與(++j)配對。先算括弧自增j=8,在求和得14+8=22.
如果是4個(++j),則22與(++j)配對,先算括弧自增j=9,在求和得22.+9=31;
5個就是41,
6個就是52…………
同理可以推出N個的情況,初值為a,則N個前自增後的和為(a+2)*N+(0.5)*(N-1)(N-2);
(這個公式推了我好久)
如果正確的話就給分;
❹ C語言關於自增的問題
標題可能有誤,如果是C++的話,一切沒問題;但是C語言中,如果按現在編譯器一般支持的ANSI C89/ISO C90標准,以上ABCD是全錯的(原因下面再講);如果是C99標准,那麼同C++。
C/C++中一個表達式可以是左值(lvalue),表示在實現中具有對應的運行期空間。從一般的C/C++實現而言,等價於保證在程序運行時必定存在一段內存中保存了左值的值(類型不會被保存)。(lvalue的l表示location之意,暗示可以作為一元操作符&的操作數;或者left,暗示這個表達式可以作為賦值操作符=的左操作數。)對於前置或後置的++、--,同賦值操作符=同樣,要求操作數必須是一個左值。而算術表達式和後置++、--表達式都不是左值,編譯器無法確定改寫這個值需要的指令作用的存儲器位置從而實現它的值進行++、--操作,因此ACD會引起編譯錯誤。C++中前置++、--的返回值是左值,因此只要B選項中p是在所在作用域中定義過的非const的可訪問的變數,就是正確的表達式。
C語言中,括弧()不改變表達式的左值屬性;一元運算符*、下標運算符[]返回左值;序列運算符(逗號表達式)返回左值但是deprecated(可能會被標準的以後版本廢除);其它如函數調用表達式,自增、自減、算術、邏輯、比較、賦值表達式等返回的都不是左值,所以ABCD都錯。
====
[原創回答團]
❺ C語言運算符操作(自增自減)
按照編譯器原理解析的話,這個句子應該這樣解析的,(k++) + ( j ) = 8, 這里我們不說優先順序的問題,你可以查下~ 為什麼你算出是9呢,我覺是你忘記了一個重點就是k++,這個是後加,也就是在整個表達式結束後k才加1,而在計算過程中k還是算原值5的,一般來說自加自減在單一的表達式中無先後之分,但是一旦到了復雜表達中就有了先後之分了
❻ c語言里,如果後綴自增在括弧里
在引用的表達式之後再++,舉個例子:
a=1;
b=(a++);
運行的結果b=1,a=2
但如果如下
a=1;
a++;
b=a;
則b=2,a=2
❼ C語言自增自減問題
其實呢,各個編譯器對這個問題的處理方式是不同的。
要弄明白這個問題,首先得明確兩點:
1、括弧運算符的優先順序是最高的,高於自增自減運算和加減乘除運算。因此括弧內的表達式首先計算;
2、++i這個自增表達式的意思是i的值加1,然後再使用i。(++i)就表示先把i的值加1,然後再將i用在運算中。
因此。p=(++x)+(++x)+(++x);這個語句最終在本質上是p=i+i+i。而不是你認為的每次算出括弧表達式中的結果然後依次相加。這一點非常重要。
而至於最終的p=i+i+i中i的值是多少呢,不同的編譯器之間就產生了分歧。
其中vc和gcc認為按照加號運算從左到右的運算順序來。也就是先計算第一個加法,然後再計算第二個。具體的過程就是:
先計算第一個(++i),這個時候i自增成6,得到i;
再計算第二個(++i),這個時候i自增成7,得到i;
現在i=7了,計算第一個加法(++x)+(++x),也就是i+i,即7+7=14;結果存在臨時變數temp中;
然後計算第三個(++i),由於之前i=7,因此現在i自增成8,得到i;
最後計算第二個加法(++x)+(++x)+(++x),也就是temp+i。於是就是14+8=22。
而在TC中則認為必須先把高優先順序的計算完再直接計算低優先順序運算。於是就是直接先將i進行三次自增,i變成8。然後直接計算i+i+i,所以得到24。
❽ C語言有關自增運算符的問題
#include <stdio.h>
int main()
{
int a=2,b=-1,c=2;
if(a<b)
{ //加個大括弧讓你看明白點·~~~~~ 括弧裡面的if和else是一對。且都是在 if(a<b)成立後才能
if(b<0)
c=0;
else c++;
printf ("%d\n",c);
}
return 0;
}
❾ c語言運算符自增
不同C語言版本不一樣,所以運算順序也不同.有的C版本是按照三個括弧是一等級計算的,也就是說三個括弧中的內容同時運算,而有的版本則從左到右運算.因此,希望你不要太追究這個問題.為了增強程序的可移植性,像上述問題一般是這么解決的:int x=8,y;
y=++x;
y=y+(x++);
y=y+(++x);