初學C語言,是取指標目標運算子,是取地址運算子,它們有什麼區別?通俗一點謝謝

2021-04-02 12:48:08 字數 5529 閱讀 1911

1樓:匿名使用者

&是取地址運算

copy 對任意變數都bai可以進行取地址操du作如:int i , *pi ;

pi=&i ;

int **ppi ;

ppi=&pi ;

*是取指標目標運算子 其後跟隨zhi的必dao須是指標類變數如:int i,*pi ;

pi=&i ;

*pi = 10 ; //相當於 i=10 ;

*i=10; 這樣寫就是錯的,i不是指標類變數,所以 *i操作就是錯誤的語句。

2樓:匿名使用者

這兩個運算bai符功能是du

互逆的比如現在有int型變zhi量a,a值是dao100,a在記憶體中內的地址是0x012fa7a6

* 就是給定地址求值,容

即已知0x012fa7a6,求出對應值100& 就是給定變數,求地址,即要得到對應a的地址

3樓:騰韻

例如你申請一個變數,變數有他的值和他的儲存空間,*是根據變數儲存空間取出變數的值,如int *p = 4;*p就等於4,&是根據變數取出其儲存空間的地址,如 int p = 4,&p就是p所在的空間

初學c語言,*是取指標目標運算子,&是取地址運算子,它們有什麼區別? 通俗一點 謝謝

4樓:萘僵牌腦

&是取地址

運算 對任意變數都可以進行取地址操作如是取指標目標運算子 其後跟隨的必須是指標類變數如相當於 i=10 ;*i=10; 這樣寫就是錯的,i不是指標類變數,所以 *i操作就是錯誤的語句。

初學c語言,*是取指標目標運算子,&是取地址運算子,它們有什麼區別? 通俗一點 謝謝

5樓:霜序

&僅僅是取得該變數的地址,*加在變數前就是指向該變數的指標可以通過變數地址獲取變數值。

c語言中,指標和取地址運算子到底是什麼啊,能不能通俗一點講啊,謝謝

6樓:囚籠山人六

關於指標,統統都是在說記憶體的事情,記憶體就像一個大樓,每個格子都有一個門牌號,也就是地址。取地址符的作用就是得到記憶體中某一段內容的門牌號,以供後面的需要。指標就是通過一個門牌號找到這個內容,跟取地址是一對

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

7樓:慶年工坊

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級

「,」逗號運算子。

8樓:小夏在深圳

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

例如 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。同一優先順序的運算子,運算次序由結合方向所決定。

9樓:靳大大來了

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

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

1 ( )

[ ]->

, 圓括號

下標運算子

指向結構體成員運算子

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

2 !~

++ --

(型別關鍵字)

+ -*

&sizeof 邏輯非運算子

按位取反運算子

自增、自尖運算子

強制型別轉換

正、負號運算子

指標運算子

地址運算子

長度運算子 單目 自右向左

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

5 <<

>> 左移運算子

右移運算子 雙目 自左向右

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

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

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

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

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

14 = += -= *=

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

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

10樓:伊·梵

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

程式沒有亂碼:

11樓:

#include

int main()

自己觀察執行結果就一目

瞭然了。

12樓:草擬大葉

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

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

c語言 指標運算子和指標說明符有什麼區別

13樓:金色潛鳥

指標運算子和指標說明符 外形上一樣,都是 * 號, 一個用在 語句裡,一個用在宣告裡。

例如:int *p; 宣告 p 是指標,它可用來指向一個 整形變數。

int (*pf)(); 宣告pf是一個指向函式入口的指標變數,該函式的返回值(函式值)是整型。

int *ap(int x,int y) 宣告 函式 ap, 有2個形參,函式呼叫會返回 一個指標,用來指向一個 整形變數。

指標運算子,也在其運算元的左邊,該運算元是一地址,用*可取得該地址處儲存的變數的值,可做右值,也可做左值。例如:

int myage;

int *p; //指標說明符

*(&myage)=24; // 指標運算子,&myage 是地址,* 是取那個地址裡的值的運算,做左值

printf("%d",myage);

p=&myage;

printf(" %d",*p+1); //指標運算子, 輸出 指標指向的變數的值加1,做右值。

輸出 24 25

c語言移位運算子怎麼用,C語言移位運算子怎麼用?

這是c 好吧。算了c和c 的移位運算子都一樣 這個難道不對嗎,左移就是 2啊 不越界的話 原理就是你把1110化成二進位制 000010001010110 然後每個位都向左移一位,最低位補0,次高位捨棄 最高位是符號位,不能動 x 1 相當於乘以2 假如 x 8,對二進位制來說就是00001000,...

c語言運算子與表示式問題,C語言運算子與表示式問題

x 是 在本句中先將來x的值 1,然後 使用自 1後的值 y 是先使用原值,然後在以後使用 1的值這樣在printf語句中 x即 4,y 為3但是 x,y 是一個表示式,只能有一個值,這個值是3,因為取的是逗號運算子後的值作為整個表示式的值 逗號運算子的性質如此 而z 2則作為臨時變數值顯然是3 所...

c語言關於運算子的問題

在前九先執行j後在加,比方j 1 1 j 則先是1 j,當然1 j 2了,然後是執行j 這時j 2了,如果是1 j j的話,結果就改是1 1 2 4了,你推敲下是不是這樣 int m,j 5,t t j j j j 6 6 8 8 這裡我用vs2005編譯的是28,9,和你的26,9部一樣,這個可能...