关于C/C++下 a &a *a的区别,函数指针使用

在研究函数指针时发现一些问题,贴出来与大家共享。

例如定义个函数指针:

//定义指针

void (*pFunc)();

//实例一个无参函数

void printing()

{
//do something

}

pFunc = printing;

//奇怪的事情或问题来了,下面这样的调用都是正确的(VS下测试)

pFunc();

(*pFunc)();

也就是说pFunc()等于(*pFunc)()

很是无语,问度娘,QQ群里问,最终加上自己测试才得知有隐式指针(指针函数)一说,就是pFunc等于*pFunc

然后在VS下测试了几乎所有类型下的a &a *a等三种情况;

1、int 基本类型

int a = 2;

&a 获取变量a的地址;

a 获取变量a保存的内容,即整数2;

*a 错误写法;

2、int* 整数指针类型

int b = 3;

int* p = &b;

&p 获取指针变量p的地址;

p 获取指针变量p的内容,即p的本身地址;

*p 获取指针变量指向的内容,即整数3(变量b);

3、int[2][3]数组类型

int arr[2][3] = {{2,3,4},{5,6,7}};

// arr == &arr == *arr == &arr[0] 

以上这几个写法得到的打印结果都是一样,即数组的首地址;

*arr[0] 只有这个写法不一样,获取数组变量arr里保存的第一个整数2;

4、函数指针类型

void printing()

{
//do something

}

pFunc = printing;

pFunc();

(*pFunc)();

//pFunc()等于(*pFunc)()

&pFunc 获取函数指针本身的地址;

pFunc,*pFunc 这两个打印的结果是一样的,都是获取函数指针变量pFunc保存的内容,即printing的首地址(VS下测试);

当然与字面理解上是相冲突的,一般理解是pFunc保存了一个地址,*pFunc是获取到pFunc指向地址的内容;我也郁闷啊;

最后加一句,函数名即是一种隐式函数指针;


以上内容属于个人理解和测试,欢迎大牛斧正。另外GNU下的gcc未测试,猜测结果应该是一样的。


  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值