程式棧
支援函式執行的記憶體區域,通常和堆共存。即二者共同擁有一塊記憶體區域,棧位於記憶體區域的下部,堆位於記憶體區域的上部。
函式傳值
用指標傳遞資料: 一般用於對傳入的資料進行修改
用值傳遞:一般不對傳入的資料修改,取決於其資料的拷貝賦值函式的實現void
funca
(int
* num1,
int* num2)
intmain()
//說明:在main函式中呼叫funca的時候,使用了指標傳遞資料,執行到funca的時候,funca函式
//內部的區域性變數,指向的值傳遞資料的位址,修改指向這個位址的值。即使函式執行完了也不影響
//已經修改過的值
用常量指標進行傳遞資料:和1的使用類似,不同的是指向常量的指標將不可以被修改。void
funca
(int num1,
int num2)
intmain()
//執行funca函式的時候,會將n1和n2分別拷貝乙份副本,作為funca區域性變數使用,源資料沒有在函式funca中執行任何操作。因此資料不會發生變化。
返回指標void
funca
(const
int* num1,
int* num2)
void
funcb
(const
int* num1,
int*num2)
void
funcc
(const
int*
const num1,
int*num2)
說明: funca 和funcb 都傳入了指向常量的指標,但是在funcb中還是隱式的將num1給更改了,要使的num1 不被更改應該使用const
int*
在函式中有分配有效的記憶體空間,可以返回指標
在函式引數中有引用或者指標被傳入,可以返回對應的指標
不可以返回區域性資料的指標,會出現程式異常
函式指標
函式指標表示持有函式位址的指標。可以用於將函式賦值給這個函式指標,然後有函式指標進行資料的呼叫執行
例如:
示例:void (*foo)()
void (*foo) ()
返回值 函式指標變數的名字 引數
int* f() 返回int型別指標的普通函式。
int (*f)() 返回int型別的函式指標。
int* (*f)()返回int型別指標的函式指標。
使用示例:
函式指標作為引數的使用int
(*fptr)
(int);
intsquare
(int num)
intmain()
即這個要求傳入的引數是乙個符合函式指標定義的函式
函式指標作為返回值int
(*fptr)
(int);
typedef
int(
*fptr1)
(int
,int);
intsquare
(int num)
intsum
(int num1,
int num2)
//要求傳入的函式符合fptr1的型別定義,函式sum符合這個定義。
intsquare1
(int num, fptr1 fp)
intmain()
即函式返回值需要符合函式定義時候的函式指標要求
//函式指標定義
typedef
int(
*rfunc)
(int
,int);
//一般函式定義
intsummer
(int num1 ,
int num2)
//返回函式指標的函式定義
rfunc returnfuncinfo
(int style)
return summer;
}int
main()
C 指標函式和函式指標
1 指標函式 1 基本概念 指標函式 顧名思義就是帶有指標的函式,即其本質是乙個函式,只不過這種函式返回的是乙個對應型別的位址。2 定義式 type func type type 如 int max int x,int y 3 例子詳解 cpp view plain copy 1.include 2...
c 指標函式和函式指標
函式指標與指標函式 1 函式指標 形式 返回型別 函式名 參數列 一種特殊的指標,它指向函式的入口 定義乙個函式指標p,只能指向返回值為int,形參為兩個int的函式 輸出結果 include stdafx.h include using namespace std int p int,int in...
C 函式指標和指標函式
c 要是不常用,相信過四天你的指標函式與函式指標的概念就該忘個精光。其實只要記住誰在後面誰就是哪個本質。先了解下指標陣列與陣列指標吧 陣列指標 就是指向陣列的指標,它表示的是乙個指標,它指向的是乙個陣列,它的重點是指標,如,int pa 8 宣告了乙個指標,該指標指向了乙個有8個int型元素的陣列 ...