有趣的C語言 指標

2021-07-16 07:11:32 字數 2675 閱讀 6838

指標,也就是用來儲存位址的變數。scanf()函式就是使用位址作為引數。

一元運算子&可以取得變數的儲存位址。假設a是乙個變數,那麼&a就是該變數的位址,乙個變數的位址可以被看做是該變數在記憶體中的位置。

間接運算子 *

ptr=&bah

這時就可以使用間接運算子*來獲取bah中存放的數值

val=*ptr

這兩句放在一起等於下面

val=bah

指標宣告

int * p;標識乙個int型別的指標

我們可以通過如下來構建指標變數:

int * bah =& ptr;
我們可以這樣想,計算機儲存的時候需要兩個東西,第一,資料的位置標識,第二,就是真正的值。通俗一點的說法,用key和value的形式來解釋就是,bah的key是bah所對應的記憶體位址,而value則是ptr的對應位址。

#include

void mikado(int);

int main()

輸出如下

pooh位址為0028ff1c

p1=2686748,p1位址為0028ff18,p1指向位址0028ff1c

p2=2686748,p2位址為0028ff14,p2指向位址0028ff1c

1

可見,兩個指標==比較的時候是比較他們的value,也就是對應指向的pooh的位址,所以值為1,也就是true。

#include

void mikado(int);

int main()

void mikado(int bah)

結果如下

in main(), pooh=2

and &pooh= 0028ff1c

in main(), bah=5

and &bah= 0028ff18

in mikado(), pooh=10

and &pooh= 0028feec

in mikado(), bah=2

and &bah= 0028ff00

在main函式中,pooh和bah是不同的值,因此有不同的位址。

在mikado(pooh)的時候,只是進行了值傳遞,所以bah和main中的pooh也是不同的位址。

如果想將某個指標變數命名為ptr,可以使用如下語句

ptr=&pooh

ptr為一變數,pooh為一常量

這樣我們修改上面**就可以讓mikado中的bah指向main函式中的pooh

#include

void mikado(int

*bah);

int main()

void mikado(int

*bah)

輸出如下

in main(), pooh=2

and &pooh= 0028ff1c

in main(), bah=5

and &bah= 0028ff18

in mikado(), pooh=10

and &pooh= 0028feec

in mikado(), bah=2

and &bah= 0028ff1c

如果mikado改為如下

void mikado(int

*bah)

將有以下輸出

in main(), pooh=2

and &pooh= 0028ff1c

in main(), bah=5

and &bah= 0028ff18

in mikado(), pooh=10

and &pooh= 0028feec

in mikado(), bah=2686748

and &bah= 0028ff00

有人可能會對這個輸出有疑問,這是什麼鬼東西。這裡我們仔細想想,int *bah傳遞過來的是main函式中pooh的位址,這裡是0028ff1c,我們在printf(「in mikado(), bah=%d and &bah= %p \n」,bah,&bah);第乙個輸出的是%d,是其值,我們通過計算器,將十六進製制的0028ff1c轉成十進位制就是2686748,後面的輸出是2686748的位址為0028ff00

陣列名同時也是該陣列首元素的位址

int a[12];

a==&a[0]; //這個判斷是true

#include

#define size 10

int sump(int * start,int * end);

int main()

; long anwser;

anwser=sump(marbles,marbles+size);

printf("the total number of marbles is %ld.\n",anwser);

return0;}

int sump(int * start,int * end)

return total;

}

這裡結果就是上面陣列的和170

有趣的C語言預處理

分類解釋 在編譯器編譯之前,會首先搜尋預處理指令,按照指令完成編譯,預處理又分為 檔案包含 條件編譯 布局控制 雜注 和巨集替換。檔案包含 include 和 include 前者是和該c檔案相同目錄下的.h,如 include os cfg.h 或指明路徑的.h,如 include softwar...

c語言有趣的位運算

應用 1.判斷奇偶 2.見後面有趣應用 本身異或為0,與0異或為本身,滿足交換律。應用 不借助第三個數交換兩數,有趣應用4 cpp view plain copy void swap int a,int b 可以這樣理解 第一步 a b 即a a b 第二步 b a 即b b a b 由於 運算滿足...

有趣的C語言指標(一) 指標是個什麼東西?

大一的時候開始接觸了c語言,但是至今為止,一直有乙個糟糕的問題,困擾著我 c語言中的指標到底是啥?為什麼感覺很難的樣子?為什麼即使我寫了很多的c語言的 還是有可能會出現指標最基本的錯誤?不是說好的 指標就是位址的嗎 為什麼還有 指向int的指標 指向double的指標?首先 基本大部分的初學者拿到有...