函数指针和指针函数

函数指针:

           函数指针是一个指向函数的指针。而每个函数在编译的时候都会有个入口地址,这个入口地址就是函数指针所指向的地址。

使用方法:

  如下代码:

#include<iostream>

//定义了个简单的两个int型整数相加的函数
int add(int a, int b) {
	return a + b;
}

/*
      测试调用幻术add来计算a+b的值
   函数第一个参数就是个函数指针,声明方法:返回值类型 ( * 指针变量名) ([形参列表])
   后面的“形参列表”表示指针变量指向的函数所带的参数列表
*/
void testRezult(int(*addd)(int, int), int a, int b) {
	int rezult = addd(a, b);
	printf("%d", rezult);
}

int main() {
	testRezult(add, 3, 5);
	system("pause");
	return 0;
}

注意:

       ①函数指针中(*指针变量名)中的括号不能省略,并且指针变量名不必跟原函数名字一样(这段代码中的原函数名为add) 

       ②[参数列表]是可选项,可以不写

 

指针函数:

           指针函数指的是    返回值是指针的函数

例如:

#include<iostream>

char *func()
{
	static char a[20] = "Hello,World.";
	return a;
}

int main() {
	char *a = func();
	printf("%s", a);
	system("pause");
	return 0;
}

运行结果:

函数func()就是个指针函数,因为它返回的是一个char类型的指针

 

注意:

           func()函数中如果不把char字符数组定义为静态变量static的话(局部静态变量实际上也把数据加载到全局数据段中,相当于定义了个全局变量),那么数组a的作用域只能在函数体内,因此虽然return 的还是当初定义数组a的地址,但地址上的值早就被清空,所以如果要将这个指针函数返回给某个指针,然后再输出这个指针所指向这块地址的内容,这样根本得不到想要的“Hello,World!“的答案,而输出时就会打印出未初始化的栈(或堆)空间的内容(在VS里面会输出”烫烫烫)。(指针函数实际上返回的是一个指针,而指针的内容是指向一块地址

           如果func()函数不是指针函数,返回的只是个字面常量值,就能正常返回数值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值