c語言中指標可不可以用在自增自減運算子中

時間 2021-10-20 12:49:35

1樓:風若遠去何人留

可以使用。

對於type *型別的p,可以使用p++或p--來實現p移動位置,指向下乙個或上乙個元素的效果。

在c語言中,指標的本質為位址,所以當type*型別的指標在進行++或--運算時,其指向的位址值,會實際增加或減少type所佔記憶體的大小。也就是說,從數值上,當p++時,值會增加sizeof(type), 當p--時,值會減少sizeof(type)。

2樓:

普通指標可以進行++、--運算,常指標不行,指向函式的指標也不行。如有:int a[10],*p=a;,則p++、++p、p--、--p都是合法的,而a++、++a、a--、--a不行,因為a是陣列名,是常指標;被const修飾的常指標也不能進行++、--運算,如有int x,*const q=&x;,則q也不能再指向別處,q++、++q、q--、--q都是非法的。

指向函式的指標進行++、--操作是沒有意義的,因為函式大小不一,一般也不是連續存放,所以對指向函式的指標作++、--操作也是非法的……

3樓:公尺嵐

可以,++按指標所指型別的大小後移一位,--前移。比如p指標指向當前位址為2000,指標p指向的資料型別大小100,p++則指向2100位置

4樓:匿名使用者

可以,指標也是變數,可以運算 ,(*p)++ 指標p指向的變數加一, *(p++) 指標變數加1後指向的另乙個數

5樓:記住一座城

陣列名和結構體名不可以。

c語言中自加++自減--運算的資料型別可以是float和double麼?

6樓:小夏在深圳

不可以是double和float 只可以是整型。

比如int  a;  a = 1; a++; a--;

則a = 1

在c語言中還有一種更簡單的寫法,就是a++;或者++a;。這種寫法叫做自加或自增;意思很明確,就是自身加一。

相應的,也有a--和--a,叫做自減,表示自身減一。

++和--分別稱為自增和自減運算子。

自增和自減的示例:

#include

執行結果:

a=10, b=20

a=11, b=19

a=12, b=18

自增自減完成後,需要用新值替換舊值,並將新值儲存在當前變數中。自增自減只能針對變數,不能針對數字,例如10++是錯誤的。

擴充套件資料

1、++ 在前面叫做前自增(例如 ++a)。前自增先進行自增操作,再進行其他操作。

2、++ 在後面叫做後自增(例如 a++)。後自增先進行其他操作,再進行自增操作。

3、自減(--)也一樣,有前自減和後自減之分。

7樓:

++ -- 運算子是整型運算符號。

如果要實現5.1自加1後是6.1, 採用 += ;

float aa=5.1;

aa+=1;

8樓:匿名使用者

c語言中自加++自減--運算的資料型別可以是float和double!

自加++,表示變數資料+1後,再將結果儲存到該變數中,如:

x++; 相當於x=x+1; 或x += 1 ;

自減--,表示變數資料-1後,再將結果儲存到該變數中,如:

x--; 相當於x=x-1; 或x -= 1 ;

自加,自減運算子是系統提供的一種方便的數**算書寫格式,可操作的變數型別包括:整型、浮點型、單字元型、指標型別。如:

int a=0; a++;

double b=2.1; b++; //b++後,b=3.1char ch='a' ; ch++; //ch++後,ch='b' ;

int a=, *p=a; p++; //開始p指向陣列第乙個元素1,p++後,p指向下乙個元素2

9樓:匿名使用者

++和--運算不能是實型資料。只能是整型資料

c語言自增自減運算子用法

10樓:匿名使用者

a+++4等價於(a++)+4 從左到右盡可能多的取運算子

先理解自增自減的含義,他的作用就是使變數加一,這個是不會受到是字首或是字尾的影響的

(a++)+4=7 a=4

11樓:匿名使用者

c語言的抄前置++和後置++,稱為自增運算子前置--和後置--稱為自減運算子,下面以自增運算子的區別來加以介紹,自減類似

如果單獨寫 自增運算子為乙個語句,二者沒有區別++i; 和 i++; 都是讓i+1賦值給i但是如果把自增運算子寫入到另外表示式中二者就有很大區別了例如i=5;

j=i++;

執行後i為6,j為5

i=5;

j=++i;

執行後i為6,j為6

12樓:戀心

++a是先自加後操作,a++是先操作後自加,--也類同。

a+++4這種題是很容易混淆的,版而且對於一些運算規則權,不同的編譯系統有不同的規定,不建議樓主使用。

如果是作業題的話,直接用程式執行看看結果是多少就行了。

13樓:

int a[3];

for(i=0;i<3;) scanf("%d",a[i++]);

正確int a[3];

for(i=0;i<3;) scanf("%d",a[++i]);

下標越界

for(i=0;i<3;) scanf("%d",a[i++]);

相當for(i=0;i<3;)即回

for(i=0;i<3;i++) scanf("%d",a[i]);

而for(i=0;i<3;) scanf("%d",a[++i]);

相當for(i=0;i<3;)

所以下答標越界

14樓:匿名使用者

a+++4難道是++4優先????

c語言的自增自減運算子的題,求思考過程

15樓:匿名使用者

i++是先使用i的值,再對i進行加1操作.

所以在p=(i++)+(i++)+(i++)裡面在計算p的值之前,i本身的值總是5.

所以p的值就是3個5所以是15.在運算完p之後,因為有3個i++,所以i做了3次自加運算,所以i最終是8.

q的變化同理.

所以最終列印結果是 15,15,8,8

16樓:匿名使用者

你的問題我覺得涉及到對自增運算子的理解,++i意味著「立即自增i」,而i++則意味著「現在先用i的原值,稍後再自增i」,這個稍後應該理解為是在下一條語句執行前i將進行自增。

所以結果是15,15,8,8

17樓:行程21公里

++i i自增1後再參與其它運算。

--i i自減1後再參與其它運算。

i++ i參與運算後,i的值再自增1。

i-- i參與運算後,i的值再自減1。

結果很明顯15,15,8,8

希望採納

18樓:百將帥先行

誰會真正的把**寫成這樣,大學教的相當扯淡

19樓:

在不同的編譯器中可能有不同的處理行為,在發vc7中

p=(i++)+(i++)+(i++); 等效於 p = i + i + i; i++, i++, i++;

20樓:匿名使用者

這個沒有標準答案,在乙個語句中,乙個變數有多次自增自減並且用於賦值或比較,在不同編譯器下工作是不同的

21樓:匿名使用者

首先p=i+i+i,所以結果為15,再i自加,結果為8.p也一樣

22樓:bd守候幸福

#include

void main()

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

23樓:匿名使用者

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

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

24樓:甘冷玉祈志

自增自減得含義是:

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

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

25樓:第五竹月賴含

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

26樓:

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

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

27樓:匿名使用者

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

28樓:程式設計大亨

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

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

29樓:

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

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

30樓:一口沒水的枯井

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

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

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

31樓:弒之觴

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

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

32樓:

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

33樓:樂酷科技

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

常量表示式自增自減同理

34樓:匿名使用者

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

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

35樓:三天打魚

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

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

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

36樓:陰陽乾坤

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

自增自減的本質是:

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

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

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

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

c語言中自增自減運算子的運算次序?

37樓:匿名使用者

a=a++;

b=++b;

如下圖紅框中所示(gcc編譯時告警),上述兩種用法對編譯器來說是無定義的,

回即是說c語言標準答中沒有規定該怎麼處理,因為實踐過程中也沒人這麼用。

既然沒有標準,又不能說是語法錯誤,那就依賴編譯器實現。a編譯器實現可以讓a = 5,b編譯器實現也可以讓a = 6。因此,在實際專案中,不要寫這樣的語句。

防輻射衣可不可以水洗,羊毛大衣可不可以用水洗

藍月亮科學洗衣 您好!防輻射衣服主要有兩種型別,一種是用後整理方法使紡織品具有遮蔽電磁波功能,另一種是採用具有遮蔽電磁輻射效能的纖維製作成紡織品。目前市面上大部分是用第二種方法製成的防輻射衣服,這類紡織纖維稱為吸波材料。吸波材料有六類,分別是金屬纖維 含碳纖維 表面鍍層纖維 塗層纖維 導電聚合物纖維...

小米2A可不可以用大電池,小米3可不可以用2a的充電器

小米 嗨!非常抱歉,小米手機2a沒有大電池套裝,您可以前往小米官網購買備用電池或者移動電源。更詳細的描述問題有助於理解你遇到的麻煩,幫助你更準確的解決問題。謝謝你支援小米手機!小米3可不可以用2a的充電器 小心傑傑 你好 所有的小米充電器都是通用的 電流和電壓都是一樣的 不會有任何影響的 希採納 小...

男人可不可以用女性的衛生巾,男人可不可以用女性化妝品?

青春期的部分男生可能會有戀物癖,對女性的衛生巾特別感興趣,用是到可以用,注意衛生就可以了。 有一部電影裡面的 小四川 就用衛生巾擦鼻血,他說 這東西挺管用的!估計樓主被別人打破了鼻子吧! 可以,痔瘡犯了的時候,給分吧! 可以倒是可以,問題是你幹嘛用啊 男人可不可以用女性化妝品? 周事多和楊侃侃 女性...