基礎4 1 指標入門

2021-10-05 22:39:31 字數 3182 閱讀 4604

3\. 指標與函式

3\. 實踐

4\. 練習

指標是一種儲存變數位址的變數。

在計算機中每個儲存單元(乙個位元組)都有乙個編號,這個編號稱為變數位址。

普通變數的值是實際值,指標變數的值是變數的位址。

完整**見001_address.c

指標代表的是位址;

如果輸入的是位址,則相當於&變數,得到對應的值;

變數位址通常使用16進製表示,使用%p或者%p列印位址。

試一試,多次執行上面的**編譯的可執行檔案。

scanf()實參前面的&符號

定義指標與定義變數的方式一樣,只不過要在型別和變數名中間加上乙個*星號。

型別* 指標變數;
指標變數只能使用同型別變數的位址賦值。

方式1;定義+初始化;

int n =10;

int* p;

p =&n;printf

("&n=%p\n"

,p);

printf

("n=%d\n"

,n);

方式2:可以直接初始化。

int n =10;

int* p =

&n;printf

("&n=%p\n"

,p);

printf

("n=%d\n"

,n);

變數必須賦值後才能使用,指標也是必須賦值後才能使用。

指標的強大之處可以直接操作儲存位址裡面的資料。這種操作稱為解引用。使用時需要在指標前加上*星號。

注意:這裡的*與宣告指標的含義不一樣,與乘號也不一樣。

完整**見002_jieyinyong.c

#include

intmain()

在這裡對*p操作就是對n操作;對n操作就是對*p操作。

訪問變數兩種方式:一是通過變數名直接訪問,而是指標解引用訪問。

int n =10;

printf

("*(&n) = %d\n",*

(&n));

//10

值傳遞:位址並未發生改變,所以未發生呼叫;

試分析下面**執行結果。

完整**見00301——value_pass.c

int

func

(int n)

intmain()

指標傳遞:位址並未發生改變,所以發生呼叫;

試分析下面**執行結果。

完整**見00302——address_pass.c

#include

intfunc

(int

* n)

intmain()

函式內部改變函式外部定義的區域性變數必須滿足兩個條件:

指標引數

解引用

實現函式swap()交換兩個變數的值。

方案1:值傳遞

完整**見00401——value_swap.c

#include

void

swap

(int m,

int n)

intmain()

方案2:指標傳遞

完整**見00402——address_swap.c

#include

void

swap

(int

*m,int

*n)int

main()

實現函式divmod()輸入引數ab,同時獲取ab的商和餘數。

多個返回值:採用指標返回;

完整**見005——divmod.c

#include

intdivide

(int n ,

int m,

int* mod)

intmain()

指標在函式中有這兩種應用,一種是即作為輸入又作為輸出;另一種只作為輸出。

實現函式********()輸入引數abc,返回能否構成三角形,如果能夠構成三角形從引數獲得周長和面積。

實現函式circle()輸入引數r,從引數獲得周長和面積。

4 1 指標的基礎

1 指標的本質 指標在本質上也是乙個變數 指標需要占用一定的記憶體位址 指標用於儲存記憶體位址的值 不同型別的指標占用的記憶體空間大小相同 位址匯流排32位機,4個位元組 2 號的意義 在指標宣告時,號表示所宣告的變數為指標 在指標使用時,號表示取指標所指向的記憶體空間的值 號類似一把鑰匙,通過這把...

C 基礎入門 07指標

指標的作用 可以通過指標間接訪問記憶體 指標變數定義語法 資料型別 變數名 示例 int main 指標變數和普通變數的區別 總結3 對指標變數解引用,可以操作指標指向的記憶體 提問 指標也是種資料型別,那麼這種資料型別占用多少記憶體空間?示例 int main 總結 所有指標型別在32位作業系統下...

C 基礎入門 6 指標

指標變數定義語法 資料型別 變數名 int main 輸出 指標p為 00befb04 a 1000 p 1000 int main 空指標 指標變數指向記憶體中編號為0的空間 用途 初始化指標變數 注意 空指標指向的記憶體是不可以訪問的 空指標 int p null 野指標 指標變數指向非法的記憶...