C語言指標基礎知識點 三 指標變數作為函式引數

2021-10-01 04:37:08 字數 2038 閱讀 3375

指標系列目錄

c語言指標基礎知識點(一)–指標及指標變數

c語言指標基礎知識點(二)–指標變數的引用

c語言指標基礎知識點(三)–指標變數作為函式引數

c語言指標基礎知識點(四)–通過指標引用陣列

c語言指標基礎知識點(五)–用陣列名作函式引數

c語言指標基礎知識點(六)–通過指標引用多維陣列

c語言指標基礎知識點(七)–通過指標引用字串

c語言指標基礎知識點(八)–返回指標值的函式

c語言指標基礎知識點(九)–指標陣列和多重指標

c語言指標基礎知識點(十)–動態記憶體分配與指向它的指標變數

指標變數作為函式引數

函式的引數不僅可以是整型、浮點型、字元型等資料,還可以是指標型別。它的作用是將乙個變數的位址傳送到另乙個函式中。

栗子:

對輸入的兩個整數按大小順序輸出。現用函式處理,而且用指標型別的資料作函式引數。

#include

intmain()

void

swap

(int

*p1,

int*p2)

//定義swap函式

說明:

在函式呼叫時,將實參變數的值傳送給形參變數,採取的依然是值傳遞的方式,因此 p1 的值為 &a,p2 的值為 &b。這時,p1 和pointer_1 都指向變數 a,p2 和 pointer_2 都指向變數 b,執行 swap函式體後,*p1 和 *p2 的值互換,相當於 a 與 b 的值互換。函式呼叫結束後,形參 p1 和 p2 不復存在 (被釋放),此時,a 與 b 已經是交換後的值。

注意:

如果swap函式體寫成以下這樣就有問題了:

void

swap

(int

*p1,

int*p2)

//定義swap函式

*p1就是 a, 是整型變數。而 *temp 是指標變數 temp 所指向的變數。但由於未給 temp 賦值,因此,temp中的值是不可預見的,所以 temp 所指向的單元也是不可預見的。所以,對 *temp 賦值就是向乙個未知的儲存單元賦值,而這個儲存單元可能存在著乙個有用的資料,這樣就可能破壞系統的正常工作狀況。

注意:

不能企圖通過改變指標形參的值而使指標實參的值改變。

栗子:

#include

intmain()

void

swap

(int

*p1,

int*p2)

//定義swap函式

c語言中實參變數和形參變數之間的資料傳遞是單向的值傳遞方式。指標變數做函式引數同樣要遵循這一規則。

總結:

不可能通過執行呼叫函式來改變實參指標變數的值,但是可以改變實參指標變數所指變數的值。

拓展:

函式的呼叫可以(而且只可以)得到得到乙個返回值,而使用指標變數做引數,可以得到多個變化了的值。

栗子:

輸入 a、b、c3 個整數,按大小順序輸出。

#include

intmain()

void

exchange

(int

*p1,

int*p2,

int*p3)

//定義swap函式

void

swap

(int

*pt1,

int*pt2)

C語言指標基礎知識點 九 指標陣列和多重指標

指標系列目錄 c語言指標基礎知識點 一 指標及指標變數 c語言指標基礎知識點 二 指標變數的引用 c語言指標基礎知識點 三 指標變數作為函式引數 c語言指標基礎知識點 四 通過指標引用陣列 c語言指標基礎知識點 五 用陣列名作函式引數 c語言指標基礎知識點 六 通過指標引用多維陣列 c語言指標基礎知...

C語言知識點四 指標

c語言學習筆記 四 32位系統,所有指標型別是4個位元組大小,64位下是8個位元組大小 int a 1 int p a printf p n a printf p n p printf p n p printf d n sizeof p 00000045d9ddf7b4 00000045d9ddf7...

C語言基礎知識(六)(指標)

一 宣告和定義的區別 建立儲存空間的宣告稱為定義,不需要建立儲存空間的宣告稱為宣告。二 變數指標和指標變數 乙個變數的位址成為變數的指標。如果有乙個變數專門存放另一變數的位址,稱它為指標變數,也就是說指標變數的值是位址,例如 int pointer。指標變數的賦值 定義的時候初始化 int a 5 ...