指標系列目錄
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 ...