C語言中為什麼常量和表示式不能進行自增自減運算

時間 2021-09-07 13:29:16

1樓:匿名使用者

首先說表示式,我們要知道自增和自減的原理,從表象上看自增自減對一個變數的值進行+1或-1操作。但是深入到底層的實現原理,這兩個操作其實是對固定的記憶體地址內的值進行+1或-1。所以要能夠自增自減首先就要滿足有固定的記憶體地址,而對於表示式來說,最終表示式計算得到的結果如果不賦值給變數的話是沒有固定記憶體地址記錄這個值的。

再來說常量,雖然常量是有分配固定記憶體地址,但是常量的意義就是指‘不變化的量’,所以說這是型別限定了常量是不能被改變的,如果能變,那就不是常量了。

2樓:甘冷玉祈志

自增自減得含義是:

i++等價於i=i+1,顯然,常數4=4+1是不對的!

而表示式,沒有自增自減,是c的規定。

3樓:第五竹月賴含

這是c語言設計之初就規定的,常量不能自動遞增,如果能自動遞增就不叫常量了,就叫變數了。表示式就更不用說了~~

4樓:

常量 編譯器不允許更改。(強制轉換後可以更改)

表示式 是在 cpu 暫存器裡執行,沒有記憶體儲存,不能自增自減。

5樓:匿名使用者

常量與表示式沒有可供計算後值的儲存空間,只有變數才可以隨意賦值並存放值,所以c語言規定,賦值號(=)左邊只能為變數

6樓:程式設計大亨

常量,或者具有常屬性的表示式,或者變數,或者函式返回值,都是不能自增自減的

因為他在記憶體的常量區, 常量區的值就是不能改變的,由於記憶體物理設計導致的吧,這個沒有深究過.左值(運算子左邊的值)運算都不能是常量,

7樓:

常量是一個固定值是不可以被改變的,相當於記憶體裡這一塊是被鎖定了的只能被調運不能更改它的值。常量就像一個工具,你可以用它來進行別的操作但不能改變它的原本狀態。

表示式自增自減運算可以計算,但是沒有實際意義,因為沒有申請記憶體單元,所以就算自增自減了也無變數供存放

8樓:一口沒水的枯井

常量和表示式都是右值,右值不可以被修改

自增或自減會修改所操作物件的值

擴充套件:左值是對應記憶體中有確定儲存地址的物件的表示式的值,而右值是所有不是左值的表示式的值。

9樓:弒之觴

(1)常量不能進行自加自減運算。如4++,與其等價的表示形式為4 =4+1,不符合賦值表示式的要求。特別注意的是在c語言中陣列名和函式名都是常量,故不能進行自加自減運算 。

(2)表示式不能進行自加自減運算。如(x+y)++,與其等價的表示形式為x+y=x+y+1,不符合賦值表示式的要求。

10樓:

這個不用那麼深究吧 就知道就行了唄 寫的時候不那麼寫不就完了 這都是編譯器的規定

11樓:樂酷科技

常量就是值確定的 自增自減不是就改變值了麼

常量表示式自增自減同理

12樓:匿名使用者

什麼叫常量? 常量就是不能改變的數

只有變數才能改變, 賦值,自增,自減

13樓:三天打魚

常量即是不可改變的量,而自增自減是會修改常量值的,所以凡是修改常量值的語句都違背了常量本身的定義,因而不能自增自減常量。

補充:常量表示式將在編譯時而不是執行時計算,並且可在可使用常量的任何位置使用。 常量表示式的計算結果必須是位於該型別的可表示值範圍內的常量。

常量表示式的運算元可以是整數常量、字元常量、浮點常量、列舉常量、型別強制轉換、sizeof 表示式和其他常量表示式。

14樓:陰陽乾坤

常量就是被  const 修飾的變數,因為被 const 修飾了,所以肯定不能進行自增自減操作,如果在**中修改,編譯器會檢查不通過。

自增自減的本質是:

將資料從記憶體讀取到暫存器

在暫存器中完成加1或減1操作

將資料從暫存器寫回記憶體

表示式本身就會得出一個結果,這個結果沒有被儲存到記憶體中,所以上面的第1步就無法完成,下面的步驟當然也無法執行了。

c語言中為什麼自增運算子(++)不能用於表示式?

15樓:佼欣德汲璧

其實這個問題是c語言規定對這種語法不進行編譯!如果內鑲組合語言是可以的如:int

a=1,b=2,c;__asm此時的c=4;完全用c語言,我們必須這樣:int

a=1,b=2,c=0;c=(a+b);c++;//或:++c;如果不是已經會組合語言,那隻需記住:這是c的語法規定,不用多做研究,浪費時間.

16樓:czj追風少年

變數佔據著一定的記憶體空間,儲存著資料; (a+b)++中,(a+b)的值為5,其實現自增後值為6,但是該語句僅僅表示個6的數值而已,它沒跟系統說要將6放在**,賦給什麼變數。那麼該語句雖然執行計算了,但是隻相當於 6;語法上可行,但是毫無意義 應該為 c=(a+b)++; 則c被賦值為6;

陣列名是一個【 】常量,不能對它進行自增、自減和賦值運算。

17樓:匿名使用者

陣列名型別是type,其

bai值與陣列首元素du的地址相zhi同,但代表dao整個陣列,且陣列名的值在內一開始就確定容無法改變,故為常量。從另外一方面來說如果可以自增,則陣列名的自增步長是陣列長度,顯然不可能。

!!! 陣列名不是指標!!!

18樓:我很無語中

有點模糊,應該說的是指標吧

c語言裡關於自增自減運算子的問題

19樓:金色潛鳥

字首加/減 與 字尾加/減 的不同 -- 在於表示式 裡 的 值。

表示式 裡, 字首加 要先自增, 後使用。

表示式 裡, 字首減 要先自減, 後使用。

表示式 裡, 字尾加 要先使用原值。出了表示式後 再自增。

表示式 裡, 字尾減 要先使用原值。出了表示式後 再自減。

a=++i; 字首加 要先自增, 後使用。執行: i=i+1; a=i ; ( i=7; a=7;)

b=i++; 字尾加 要先使用原值。出了表示式後 再自增。執行 b=i; i++; (b=7;i=8)

a=--i; 字首減 要先自減, 後使用。i=i-1; a=i; (i=7;a=7)

b=i--; 字尾減 要先使用原值,執行. b=i.i=i-1; (b=7; i=6)

printf("%d\n",-i++); 字尾加 要先使用原值。出了表示式後 再自增. 列印 -i; (-6) 出了表示式 i=i+1;(i=7)

printf("i=%d\n",i); 列印 i=7

20樓:時尚裝飾萊兒

我在vc6·0上編寫了一下 這是截圖

首先是前兩個7 因為i++是先賦值在進行加一運算,++i是先加一然後再進行賦值操作,所以a,b中儲存著值是7,此時i的值是8

然後是後面兩個7,同理 a為7,b為7,此時i為6同理,-i++中因為++在後面 所以先輸出-6,然後在把i加一 這是i變成了7

最後 根據輸出格式 輸出了  i=7;

c語言中表示式的值怎麼算,C語言中表示式的值怎麼算

墨汁諾 此式即等同於 4!3 2 4 1 5 1代表真,0代表非,則原式即 1 1 0 所以值為0。例如 12 5 2 只為這個是整數運算,結果只取整數部分。62 1 6 7 7 6 1 13 49 623.2 6 7 1 44.8 可以。逗號運算子,從左至右計算,取最後一個表示式的值作為整個語句的...

關於c語言中逗號表示式

盛晚竹陀賦 式子的最後結果取決於最後乙個表示式 即a 5 a只被賦值過一次,即a 3 5所以表示式值為20 蕢梅箕酉 主要是將程式中多行完成並作一行完成 比如這樣一句 while gets s strcmp s,0 你看一下應該能明白怎麼用 就是執行了gets和strcmp 但是返回的是strcmp...

C語言代數關係,c語言中,關係表示式和邏輯表示式的值是什麼?

1 並 union 關係r與s具有相同的關係模式,即r與s的元數相同 結構相同 r與s的並是屬於r或者屬於s的元組構成的集合,記作r s,定義如下 r s 2 差 difference 關係r與s具有相同的關係模式,關係r與s的差是屬於r但不屬於s的元組構成的集合,記作r s,定義如下 r s 3 ...