c語言 取位址運算子的理解

2021-09-07 05:05:11 字數 931 閱讀 2489

例如:int a = 1;

//假設a的位址是0x7dfe88

int *p = (int *)0x7dfe88;

int num = 1;

int *p1 = #

以上是一段簡單的給指標p,p1賦值的**,0x7dfe88是一段單純的十六進製制位址,但是當位址轉指標的時候卻必須加上強轉(int *);如果不加強轉,那麼編譯器就會提出警告( warning c4047: 「初始化」:「int *」與「int」的間接級別不同);但是使用&運算子取位址的時候卻不需要加任何強轉就能編譯通過,說明&運算子絕不是的獲取位址那麼簡單,「=」賦值運算子的運算順勳是從右向左,說明"="的右邊也是乙個指標,所以在此假設&運算子會取出num的位址,並且根據num的型別生成乙個臨時的指標。

根據假設,寫出如下**驗證:

int num = 1;

double *p1 = #

結果編譯器報「 warning c4133: 「初始化」: 從「int *」到「double *」的型別不相容」錯誤。所以我的假設有一定的道理。

綜上所述:

(&p)則是這樣一種運算,返回乙個指標,該指標的值是當時宣告p 時開闢的位址,指標的型別是p的型別對應的指標型別。(只是本人自己觀點)

通過對指標&運算子的理解,我認為*運算子在某些情況下(例如二級指標)同樣有將乙個位址轉化成指標的功能。

例子:int num = 1;

int *p = #

int **p1 = &p;

int *p2 = *p1;

如果將int *p2 = *p1;替換成double *p2 = *p1;,那麼編譯器會警告: warning c4133: 「初始化」: 從「int *」到「double *」的型別不相容

所以(*p)操作是這樣一種運算,獲取指標p的值(變數的位址)找到對應的變數的值-----返回以(p 的值作為位址)的那個空間的值。

c語言中的取模運算子 c語言運算子的詳細講解

達式進行 運算時,只要有乙個為真,總的值就為真,只 有當所有的都為假時,總的式子才為假。邏輯非 運算是把相應的變數資料轉換為相應的真 假值。若原先為假,則邏輯非以後為真,若原先為真,則邏輯非以後為假。還有一點很重要,當乙個邏輯表示式的後一部分的取值不會影響整個表示式的值時,後一部分就不會進行運算了。...

C語言 運算子與 運算子

我們平時使用帶參巨集時,字串中的巨集引數是沒有被替換的。例如 輸出結果為 然而,我們期望輸出的結果是 5 20 2513 14 27 這該怎麼做呢?其實,c語言允許在字串中包含巨集引數。在類函式巨集 帶參巨集 中,號作為乙個預處理運算子,可以把記號轉換成字串。例如,如果a是乙個巨集形參,那麼 a就是...

C語言 運算子和 運算子

變數 代表 取變數的位址 變數 代表 指標型的變數 取址運算子 用來取得其運算元的位址。如果運算元 x 的型別為 t,則表示式 x 的型別是 t 型別指標 指向 t 的指標 取址運算子的運算元必須是在記憶體中可定址到的位址。換句話說,該運算子只能用於函式或物件 例如左值 而不可以用於位欄位,以及那些...