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語言中逗號指的是什麼意思?

淡依美沙楚 x a b b c 是一個逗號表示式,整個表示式的值為最後一個式子的值,但是逗號表示式要從左向右計算,這個等價於 x 2 4 b c 6,4 6 6,10 即表示式值為10 把10賦值給y 則y的值就是10 裴水藍賓木 逗號表示式,按從左到右順序進行,先計算a 3 5,再計算a 4,然後...

C語言逗號表示式,C語言中逗號運算子怎麼用

int main 結果 value 8逗號表示式從左往右計算。但返回右邊的資料值作為表示式值 1.k 3 2 k 6 2.6,k 4 表示式返回10,k仍為63.10,k 2 k為6,表示式返回8。依靠非常全面的運算子和多樣的資料型別,可以輕易完成各種資料結構的構建,通過指標型別更可對記憶體直接定址...

在c 語言中,表示式(212)的值是什麼

程式猿3號 是按位異或的運算。21 的二進位制 10101 2 的二進位制 00010 結果是 10111 也就是十進位制的23。 小靖鍋鍋 c 中 表示按位異或 按位或 按位與 如果需要計算先將之轉換成二進位制 如此題中 21 2 二進位制10101 10 10111 十進位制23 值為23 你可...