程序栈
支持函数执行的内存区域,通常和堆共存。即二者共同拥有一块内存区域,栈位于内存区域的下部,堆位于内存区域的上部。
函数传值
用指针传递数据: 一般用于对传入的数据进行修改
void funcA(int* num1
,int* num2
){
int temp
;
temp
= *num1
;
*num1
= *num2
;
*num2
= temp
;
}
int main(){
int n1
= 10;
int n2
= 20;
funcA(&n1
,&n2
);
}
用值传递:一般不对传入的数据修改,取决于其数据的拷贝赋值函数的实现
void funcA(int num1
,int num2
){
int temp
;
temp
= num1
;
num1
= num2
;
num2
= temp
;
}
int main(){
int n1
= 10;
int n2
= 20;
funcA(n1
,n2
);
}
用常量指针进行传递数据:和1的使用类似,不同的是指向常量的指针将不可以被修改。
void funcA(const int* num1
,int* num2
){
*num2
= *num1
;
}
void funcB(const int* num1
,int *num2
){
int a
= 100;
num1
= &a
;
*num2
= *num1
;
}
void funcC(const int* const num1
,int *num2
){
*num2
= *num1
;
}
说明: funcA 和funcB 都传入了指向常量的指针,但是在funcB中还是隐式的将num1给更改了,要使的num1 不被更改应该使用
const int* const num1 作为参数,具体参考 c指针相关文章
返回指针
在函数中有分配有效的内存空间,可以返回指针在函数参数中有引用或者指针被传入,可以返回对应的指针不可以返回局部数据的指针,会出现程序异常
函数指针
函数指针表示持有函数地址的指针。可以用于将函数赋值给这个函数指针,然后有函数指针进行数据的调用执行
例如:
void (*foo)()
void (*foo) ()
返回值 函数指针变量的名字 参数
示例:
int* f() 返回int类型指针的普通函数。 int (*f)() 返回int类型的函数指针。
int* (*f)()返回int类型指针的函数指针。
使用示例:
int (*fptr
)(int);
int square(int num
){
return num
* num
;
}
int main(){
int num
= 10;
fptr
= square
;
cout
<< fptr(num
) << endl
;
}
函数指针作为参数的使用
即这个要求传入的参数是一个符合函数指针定义的函数
int (*fptr
)(int);
typedef int (*fptr1
)(int,int);
int square(int num
){
return num
* num
;
}
int sum(int num1
, int num2
){
return num1
* num2
;
}
int square1(int num
, fptr1 fp
){
return fp(num
,num
);
}
int main() {
int num
= 10;
fptr
= square
;
cout
<< fptr(num
) << endl
;
square1(num
,sum
);
return 0;
}
函数指针作为返回值
即函数返回值需要符合函数定义时候的函数指针要求
typedef int (*rfunc
)(int,int);
int Summer(int num1
,int num2
){
return num1
+ num2
;
}
rfunc
returnFuncInfo(int style
){
if(style
== 1){
return Summer
;
}
return Summer
;
}
int main() {
rfunc ff
= returnFuncInfo(1) ;
cout
<< ff(10,23);
return 0;
}