C語言指標計算問題(優先順序?),C語言指標及運算子優先順序的問題

時間 2022-07-15 21:05:14

1樓:匿名使用者

printf函式中,變數是從右至左執行的。

所以第一行先計算的--x,然後再計算的x,所以都是壞值。

2樓:

不可能!x顯然還沒有宣告!

c語言指標及運算子優先順序的問題

3樓:匿名使用者

先執行vp++,由於++是在變數後面的,返回vp原來的值(沒有執行++前的值),將0賦值給*vp

如果是*++vp=0,則將0賦值給已經加1的指標中地址

4樓:接接接接接

雁引愁心去,山銜好月來。

c語言中,指標的運算是怎麼算的,如pa++

5樓:匿名使用者

指標自加一位

就是指向該型別的下一個單元

也就是實際增加的地址值

為sizeof(*pa)

6樓:雲淡風輕in蘇州

pa++就是pa = pa+1

但是這個1的位元組數是根據pa指標的型別來取值的比如int* pa;那這個1就是sizeof(int)double*pa;那這個1就是sizeof(double)陣列的話,很簡單,就是指向下一個元素的地址!

7樓:我是你爺

要看什麼型別,它會指向下一個變數的首地址,比如p指標是long int型的,p++就會跳過四個位元組指向下一個。一般指標自加運用於陣列中,因為這樣可以方便指標一個個指向陣列中的成員。

8樓:罪_飄落無殤

如果是陣列就指向下一個元素地址

9樓:維真

指向pa後面一個地址

c語言中優先順序高先算還是低了先算

10樓:我們必將知道

先算優先順序高的,再算優先順序低的。

例如:2 + 3 == 5 && 1 + 2 > 5其中運算級從高到低順序:

+、-== 、 >

&&由於加在左,所以先算加,然後算減,然後判斷==,然後判斷》,然後算&&

11樓:匿名使用者

並不是說優先順序高就先算,而是說優先順序高的結合性高,而他們的計算順序還是按設定的從左往右或者從右往左進行計算的。

c語言指標計算

12樓:匿名使用者

設pa是指向陣列a的指標變數,則pa+n,pa-n,pa++,++pa,pa--,--pa 運算都是合法的。

指標變數加或減一個整數n的含義是把指標指向的當前位置(指向某陣列元素)向前或向後移動n個陣列元素位置;

指標變數++、--表示指標指向指向的當前位置(指向某陣列元素)向前或向後移動1個陣列元素位置。

13樓:匿名使用者

成立,但要同一型別。例如讓q和p都指向i*q = *p; //把p指的10賦給*q

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

14樓:慶年工坊

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級

「,」逗號運算子。

15樓:靳大大來了

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

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

1 ( )

[ ]->

, 圓括號

下標運算子

指向結構體成員運算子

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

2 !~

++ --

(型別關鍵字)

+ -*

&sizeof 邏輯非運算子

按位取反運算子

自增、自尖運算子

強制型別轉換

正、負號運算子

指標運算子

地址運算子

長度運算子 單目 自右向左

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

5 <<

>> 左移運算子

右移運算子 雙目 自左向右

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

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

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

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

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

14 = += -= *=

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

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

16樓:伊·梵

*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結果自增

程式沒有亂碼:

17樓:

#include

int main()

自己觀察執行結果就一目

瞭然了。

18樓:草擬大葉

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

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

c語言中關係運算子和自加自減運算優先順序哪個高

19樓:仁昌居士

各種運算子間的優先順序從高到低為數值運算子、字串運算子、關係運算子、邏輯運算子。可以用括號改變優先順序順序,使得括號內的運算優先於括號外的運算。對於多重括號,總是由內到外強制表示式的某些部分優先執行。

自加自減運算子屬於數值運算子,優先順序比關係運算子高。

20樓:唯指間流年

不知道現在看到是不是有點遲了,自加的優先順序是要高於關係運算子的,這裡是++y所以首先應該先給y+1再判斷y+1和2的大小,但如果是y++的話就要先判斷y和2的大小,然後再給y+1

21樓:你猜我猜哇擦猜

以自增運算子為例,當自增運算子++作用於一個變數時例如:當i=3時++i這個算術表示式的值為4,同時變數i的值也由原來的3改變為4。

一般情況下,計算表示式後不改變變數本身的值,而++運算子和--運算子組成的表示式計算後,則改變變數的值,這稱為運算子的***。

這類運算子在計算表示式時,一定要注意區分表示式的值和變數的值。

c語言指標問題

22樓:匿名使用者

沒有區別,這個問題涉及到運算子的優先順序

其中++運算子的優先順序高於*取值運算子,所以無論加不加括號都是一個效果

先地址自增1,然後再*取值.

*s++與(*s)++就有區別了

23樓:

*s++是找到指標變數s所指向的變數,然後將s的指向後移一個單元; *(s++)是讓s指向它所指向的變數的後一個單元,並且通過指標運算子找到該變數。

24樓:匿名使用者

*取地址優先順序大於++優先順序,第一個是先取地址再++,第二個由於加了括號,結果相反。

25樓:匿名使用者

*s++ 先執行*s,再執行s++;

*(s++) 先執行s++ 再執行*s(此時的s已自增1了)

緊急提問!!急求c語言指標問題

26樓:匿名使用者

因為這個++是在後面的,你得先運算,再++,這是後++的規則~~~

C語言指標問題,C語言指標問題?

文庫精選 內容來自使用者 zzbo2022 讓你不再害怕指標 前言 複雜型別說明 要了解指標,多多少少會出現一些比較複雜的型別,所以我先介紹一下如何完全理解一個複雜型別,要理解複雜型別其實很簡單,一個型別裡會出現很多運算子,他們也像普通的表示式一樣,有優先順序,其優先順序和運算優先順序一樣,所以我總...

C語言指標問題,C語言指標問題。

最大的寶寶 pointer是指標指向的一個值,此時為2,這個值再自加1自然為3。pointer此時還指向值2,減2的含義是指標回退兩個元素,自然指向了值6。指標本身有值,表示它指向的地址,這個值可以運算,表示對地址的修改。而指標指向的值,其實就是位於這個地址所存的值。在彙編以上層次的程式設計中,記憶...

c語言二級指標問題,C語言二級指標問題

1 通過二級指標去訪問二維陣列需要先給二級指標分配等同於二維陣列行數的一維陣列指標,然後把二維陣列的每行首地址賦值給對應位置的一維指標上。之後就可以通過二維指標直接訪問了。2 參考 如下,可以看具體註釋輔助理解。include 輸入輸出標頭檔案。include 本程式需要用到malloc free函...