C語言指標初識

2022-09-13 13:42:11 字數 2083 閱讀 7181

定義指標變數,在變數名前面加星號*,格式為:

int a;

datatype *pointname;      int *p; p = &a;

或者              int a;

datatype *pointname = value;   int *p = &a;

定義指標變數時必須帶*,給指標變數賦位址值時不能帶*,等於乙個位址即可改變指標指向

1

//定義普通變數

2float a = 99.5, b = 10.6;3

char c = '

@', d = '#'

;4//定義指標變數

5float *p1 = &a;

6char *p2 = &c;7//

修改指標變數的值

8 p1 = &b;

9 p2 = &d;

p1從指向&a變為指向&b,p2從指向&c變為指向&d。

這裡的*稱為指標運算子,用來取得某個位址上的資料,

1 #include 2

intmain()

執行結果:15, 15

a的位址是0x···,p 指向 a 後,p 本身的值會變為 a的位址值0x···,*p 表示獲取位址 0x··· 上的資料,也即變數 a 的值,所以 *p 變為了取資料值。

指標除了可以獲取記憶體上的資料,也可以修改記憶體上的資料

1 #include 2

intmain()

執行結果:99, 99, 99, 99

*在不同的場景下有不同的作用:定義指標變數時的*和使用指標變數時的*意義完全不同。

*可以用在指標變數的定義中,表明這是乙個指標變數,以和普通變數區分開;

使用指標變數時在前面加*表示獲取指標指向的資料,或者說表示的是指標指向的資料本身。

1

int a,b; //

宣告變數

2int *p = &a; 或者 int *p; p = &a; //

定義指標

3 *p = 100; //

指標賦值&a的值

4 p = &b; //

改變指向

5 *p = 101; //

指標賦值&b的值

1

int x, y, *px = &x, *py = &y;

2 y = *px + 5; //

表示把x的內容加5並賦給y,*px+5相當於(*px)+5

3 y = ++*px; //

px的內容加上1之後賦給y,++*px相當於++(*px)

4 y = *px++; //

相當於y=(*px)++

5 py = px; //

把乙個指標的值賦給另乙個指標

1 #include 2

intmain()

執行結果:

a=100, b=999

a=999, b=100

假設有乙個 int 型別的變數 a,pa 是指向它的指標,那麼*&a&*pa分別是什麼意思呢?

*&a可以理解為*(&a)&a表示取變數 a 的位址(等價於 pa),*(&a)表示取這個位址上的資料(等價於 *pa),繞來繞去,又回到了原點,*&a仍然等價於 a。

&*pa可以理解為&(*pa)*pa表示取得 pa 指向的資料(等價於 a),&(*pa)表示資料的位址(等價於 &a),所以&*pa等價於 pa。

在我們目前所學到的語法中,星號*主要有三種用途:

摘自

C語言 初識指標

指標變數 格式一 型別名 指標變數名1,指標變數名2.int p char ch int a char c 指標的作用都一樣的,都是用來存放位址的,為什麼還要分型別的原因是指標變數p只能存放整型變數位址,指標變數ch只能存放字元變數位址。如何讓乙個指標存放乙個變數位址呢?p a ch c 叫做取址符...

初識C語言 指標

記憶體是電腦上特別重要的東西,計算機中所有的程式的執行都是在記憶體中進行的。所以為了有效的使用記憶體,就把記憶體劃分為乙個個小的記憶體單元,每個記憶體單元的大小是1位元組。為了能夠有效訪問到記憶體的每個單元,就給記憶體單元進行了編號。這些編號被稱為該記憶體單元的位址。位址即編號。那麼取出來的位址怎麼...

c語言printf和指標初識

1.printf是行緩衝 滿一行才輸出 遇到 n 或者 r 會輸出 scanf 和printf 用的同一緩衝區,當 printf 與scanf 連用時會輸出。因此在寫 printf 時要加 n 2.當執行程式發現段錯誤時,可以在每一行 下面加除錯資訊 printf s d n func line 這...