關於C語言指標自增運算的問題,c語言中指標可不可以用在自增自減運算子中

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

1樓:搗蒜大師

這寫操作等價:*++p、*(++p),都是p加,然後*

這些操作等價:*p++、*(p++)、*(p)++,相當於先*了,然後p再+

#include

main() , *p;

指向2

printf("%d\n" , *p);       //*,2

p = p +1;                  //p指向3

printf("%d\n", *++p);      //p指向4,再*,4

p = p +1;                  //p指向5

printf("%d\n", *p++);      //*,5,p指向6

p = p +1;                  //p指向7

printf("%d\n", *(++p));    //和*++p一樣,p指向8,再*,8

p = p +1;                  //p指向9

printf("%d\n", *(p)++);    //和*p++一樣,9,再加,p指向10}

2樓:匿名使用者

這個原因是++p和p++的含義不同,++p的含義是指標先加一,然後再使用指標;而p++的含義是先使用指標,然後指標再加一;舉個簡單的例子:

int a=0,b=0;

printf("%d %d\n",a++,++b);

那麼結果就是0和1,而不是1和1,換做指標,道理是一樣的。望採納,謝啦。

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

3樓:風若遠去何人留

可以使用。

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

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

4樓:

普通指標可以進行++、--運算,常指標不行,指向函式的指標也不行。如有: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都是非法的。

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

5樓:米嵐

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

6樓:匿名使用者

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

7樓:記住一座城

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

c語言中指標運算子*和自增運算子++的優先順序

8樓:慶年工坊

c語言中自增運算子++作為字尾的話比指標運算子*的優先順序高,作為字首的話與指標運算子*平級。

c語言的運算子主要用於構成表示式,同一個符號在不同的表示式中,其作用並不一致。下面按計算的優先順序,分別說明不同作用的表示式。需要特別指出,在c語言標準中,並沒有結合性的說法。

相同優先順序運算子,從左至右依次運算。注意字尾運算優先順序高於字首。因此++i++應解釋為++(i++)。

而與或非的運算優先順序都不一樣,因此a && b || b && c解釋為(a && b)|| (b && c)

合理使用優先順序可以極大簡化表示式。

基本表示式 1級

基本表示式(primary expressions),主要是用於運算子之間,做為運算數。

標識,常量,字串文字量,優先順序提升表示式最優先執行。

優先順序提升表示式是指圓括號包圍的表示式,如“( expression )”

字尾表示式 2級

postfix-expression [ expression ],陣列下標運算。

postfix-expression (argument-expression-list),函式呼叫,括號內的引數可選。

postfix-expression . identifier,成員訪問,

postfix-expression -> identifier,成員訪問,->號之前應為指標。

postfix-expression ++,字尾自增

postfix-expression --,字尾自減

( type-name )

( type-name ) 複合初始化,c99後新增。

單目/一元運算 3級

++ unary-expression 字首自增

-- unary-expression 字首自減

unary-operator cast-expression 單目轉型表式式, 包括 取地址& ,提領 * , 正號+ ,負號- 位反~ 邏輯否!。

sizeof unary-expression 求型別長度,對表示式求型別長度

sizeof ( type-name ) 求型別長度

強制型別表示式 4級

(type-name ) cast-expression,強制表示式成為type-name指定的型別。

乘法表示式 5級

“ * ” 乘法運算子;“ / ”除法運算子;“ % ” 取餘運算子。

加法運算子 6級

“ + ”加法運算子;“ - ”減法運算子。

移位運算子 7級

<< 左移運算子;>> 右移運算子。

關係運算子 8級

<、<=、>、>=關係運算子。

相等運算子 9級

“ == ”等於運算子;“ != ”不等於運算子。

位與運算子 10級

“ & ”按位與運算子

位異或運算子 11級

“ ∧ ”按位異或運算子(bitwiseexclusive or operator)。

位或運算子 12 級

“ | ”按位或運算子(bitwiseinclusive or operator)。

邏輯與運算子 13級

“&&”邏輯與運算子。

邏輯或運算子 14 級

“ || ”邏輯或運算子。

三元條件運算子 15級

? :條件運算子。

賦值運算子 16 級

=、 +=、 -=、 *=、 /=、 %=、 &=、 ^=、 |=、 <<=、 >>=賦值運算子。

逗號運算子 17級

“,”逗號運算子。

9樓:小夏在深圳

運算子的優先順序確定表示式中項的組合。這會影響到一個表示式如何計算。某些運算子比其他運算子有更高的優先順序,乘除運算子具有比加減運算子更高的優先順序。

例如 x = 7 + 3 * 2,在這裡,x 被賦值為 13,而不是 20,因為運算子 * 具有比 + 更高的優先順序,所以首先計算乘法 3*2,然後再加上 7。

結合性是指具有相同優先順序的操作符的運算順序,從左至右運算稱為左結合,從右至左運算稱為右結合。

自增(++)和自減(--)操作符為物件加1或減1操作提供了方便簡短的實現方式。它們有前置和後置兩種使用形式。到目前為止,我們已經使用過前自增操作,該操作使其運算元加1,操作結果是修改後的值。

c語言運算子是說明特定操作的符號,它是構造c語言表示式的工具。c語言的運算異常豐富,除了控制語句和輸入輸出以外的幾乎所有的基本操作都作為運算子處理。

擴充套件資料

運算子優先順序

1、函式計算優先。

2、其次是強制型別轉換。

3、自增、自減和取反次之。

4、先乘除再加減。

5、有括號先算括號內的。

6、表示式**現連續兩個運算子時最好用空格隔開,如a+++b要寫成:a++ +b或a+ ++b。同一優先順序的運算子,運算次序由結合方向所決定。

10樓:靳大大來了

附錄c c語言運算子優先順序和結合性

優先順序 運算子 含義 運算型別 結合性

1 ( )

[ ]->

, 圓括號

下標運算子

指向結構體成員運算子

結構體成員運算子 單目 自左向右

2 !~

++ --

(型別關鍵字)

+ -*

&sizeof 邏輯非運算子

按位取反運算子

自增、自尖運算子

強制型別轉換

正、負號運算子

指標運算子

地址運算子

長度運算子 單目 自右向左

3 * / % 乘、除、求餘運算子 雙目 自左向右4 + - 加、減運算子 雙目 自左向右

5 <<

>> 左移運算子

右移運算子 雙目 自左向右

6 < <= > >= 小於、大於、小於等於、大於等於 關係 自左向右

7 = = != 等於、不等於 關係 自左向右8 & 按位與運算子 位運算 自左向右

9 ^ 按位異或運算子 位運算 自左向右

10 | 按位或運算子 位運算 自左向右

11 && 邏輯與運算子 位運算 自左向右12 || 邏輯或運算子 位運算 自左向右13 ? : 條件運算子 三目 自右向左

14 = += -= *=

/= %= << = >>= &= ^= |= 賦值運算子 雙目 自右向左

15 , 逗號運算 順序 自左向右

11樓:伊·梵

*p_value++等價於 *(p_value++)

printf("(*p_value)++是%d\n", (*p_value)++);

// 這一行輸出的*p_value的值,也就是4,輸出之後*p_value結果自增為5

printf("*p_value++是%d\n", *p_value++);

// 這一行輸出的*p_value的值,也就是5,輸出之後p_value結果自增

程式沒有亂碼:

12樓:

#include

int main()

自己觀察執行結果就一目

瞭然了。

13樓:草擬大葉

因為指標地址自增之後,列印的是記憶體一塊未分配地區,這塊區域內容無法預知。

而先取值後自增,就是值得自增,不是指標地址自增。

計算機c語言中 指標變數p自增1 什麼意思

14樓:魔術師

自增就是+1的意思,地址+1就是指向下一個元素。例如int array[3]=;

int*p=array;//此時p指向array[0]p++;//這裡的p自增,執行後p指向array[1]

15樓:匿名使用者

int i=0;

i++;或者++i都叫自增。

i++會做以下幾個動作。

1:從記憶體中將值取出,即取出1

2:取出的值版被用來權計算。如果if(i++==0) ,即if(0==0)?

3:執行i= i+1; 即,0+1=1;

4:將值存入記憶體中

++i為先+1存入後計算

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

這種問題,沒必要糾結。如果是 q j j 結果是7 7 14連續加法,正常邏輯應該為3 8 24,但實際上,因為編譯器的優化,連加被分割為兩次暫存器運算,等價於 int edx j j q edx j 這樣就成了7 7 8 22 這是優化問題,不必糾結。這就是實際運算模式,如果明白彙編,可以看懂。 ...

c語言自增運算子問題

肯定不一樣的,運算子很簡單,a 和 a首先將他看成一個賦值表示式a 是a a 1,當a初始值為0的時候a會等於1。但是a 和 a的區別是a 整個表示式的值是從0開始而 a是先做自加運算再賦值其整個表示式 a的值為1 不一樣,a 叫後置自加,a叫前置自加.區別就是a 是先運算後自加,另一個是先自加,後...

C語言中增1減1運算子,c語言關於自增自減運算子的一個問題

小嫣老師 自增 和自減 操作符為物件加1或減1操作提供了方便簡短的實現方式。它們有前置和後置兩種使用形式。i 等同於 i i 1。和 既可寫在變數之前,稱為前置運算,如 a a 和 也可以寫在變數之後,稱為後置運算,如 a a 對單獨一個變數實行前置運算或後置運算,其結果是相同的,都是使該變數的值增...