1. 指標作為函式的引數.
1).效果
在函式的內部可以通過這個引數指標去修改實參變數的值.
2).當函式的返回值有多個的時候.
3).位址傳遞.
4).如果函式的引數是1個指標.函式希望傳遞給呼叫者1個資訊.
函式內部只會去取指標指向的變數的值而不會修改.
那麼這個時候這個引數指標就是要const修飾.
2. 指標作為函式的返回值
1).指標當然可以作為函式的返回值.
但是.不能返回區域性變數的位址.
換句話說:你返回的指標指向的變數一定要保證在函式結束之後,那個空間沒有被**還存在.
2).如果你就是要返回1個指標,那麼你就要保證這個指標指向的空間在函式結束以後仍然存在.
那麼這個時候,就可以將空間申請在堆區.然後返回堆區的位址.
一定要記得,呼叫者使用了完之後,記得free
3.注意.
1).可以返回區域性變數的值.但是不能返回區域性變數的位址.
2).如果你非要返回指標,那麼就應該把這個空間申請在堆區.
4. 案例:
寫1個函式.傳入1個1-7的星期數,返回對應的英文星期天.
void getweekday(int day);
1).如果返回值是字串,那麼返回值的型別就寫char*
2).直接返回字串常量.
5. 申請在常量區的空間.不會被**的.
直到程式結束的時候才會**.
不能改:
以字元指標儲存在常量區的字串資料不能改.
其他儲存在常量區的資料是可以改的. 1.
我們之前學習的指標.
一般情況都是指向另外
1個變數.
int num = 10;
int* p1 = #
指標是指向記憶體中的
1個位元組空間的.
2.程式在執行的時候
.會將程式載入到記憶體.
程式中主要有**/指令
.
**段中主要儲存程式的**
.而程式的**就包括函式.
所以,函式肯定要存在記憶體的**段中.
既然函式要儲存在記憶體中
那麼肯定要用
1塊空間來儲存.
那麼這個塊空間一定有
1個位址.n
那麼我們就可以宣告
1個指標
,儲存這個函式的位址
.讓這個指標指向這個函式.
使用指標來間接的呼叫函式.
優勢:呼叫函式有了兩種方式.
->
直接使用函式名呼叫
->
使用指向函式的指標間接呼叫.
3.指向函式的指標的宣告
1). 1
個指標函式的指標
.並不是任意的函式都可以指向.
而是有限定的
.要求指向的函式的返回值型別和引數描述必須要與指標的描述一樣.
2).宣告語法
返回值型別
(*指標名
)([引數列表
]);
void (*pfunction)();
表示宣告了
1個指向函式的指標
,名字叫做
pfunction.
這個指標只能指向沒有返回值
,並且沒有引數的函式.
int (*pfun)(int num1,int num2);
表示宣告了
1個指向函式的指標
,名字叫做
pfun.
這個指標只能指向返回值為
int型別
並且有兩個整型的引數的函式.
4).指向函式的指標的初始化.
1).取到符合指標條件的函式的位址.
函式的名稱就代表函式的位址.
2).將位址賦值給指標變數.
直接將符合條件的函式的名稱賦值給這個指標.
3).注意.
函式名代表函式的位址.
不要函式名加小括弧
.如果加了小括弧
,就代表執行這個函式
拿到這個函式的返回值.
5).如何使用指標來間接的呼叫指標指向的函式呢?]
void (*pfunc)() = test; //pfunc
指標就指向了
test函式
pfunc();
(*pfunc)();
有引數就給
,有返回值就接.
6).小技巧.
如果要定義
1個指標指向
1個函式
拷貝這個函式頭
.刪除函式名
用小括弧代替
裡面寫上
*加指標名稱
C語言基礎 函式指標 指標函式
參考這位大佬的文章,加上自己的理解 定義 指標函式,就是乙個返回值是指標的函式,其本質是乙個函式,而該函式的返回值是乙個指標。宣告格式為 型別識別符號 函式名 參數列 例如 int fun int x,int y 它的返回值是乙個int型別的指標 指標函式也沒什麼特別的,和普通函式對比不過就是其返回...
C語言 指標函式和函式指標
指標函式和函式指標 指標函式其實是乙個簡稱,是指帶指標的函式,它本質上是乙個函式,只是返回的是某種型別的指標。其定義的格式為 型別識別符號 函式名 參數列 函式指標,從本質上說是乙個指標,只是它指向的不是一般的變數,而是乙個函式。因為每個函式都有乙個入口位址,函式指標指向的就是函式的入口位址。其定義...
C語言 指標函式和函式指標
1 指標函式是指帶指標的函式,本質上是乙個函式,函式返回值是某一型別的指標 定義 型別識別符號 函式名 參數列 int f int x,int y 它首先是乙個函式,只不過這個函式的返回值是乙個位址值,函式返回值必須用同型別的指標變數來接受,也就是說,指標函式一定有函式返回值,而且,在主調函式中,函...