关于C/C++下 a &a *a的区别,函数指针使用
来源:互联网 发布:pdfobject.js使用方法 编辑:程序博客网 时间:2024/05/18 00:36
在研究函数指针时发现一些问题,贴出来与大家共享。
例如定义个函数指针:
//定义指针
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保存的内容,即printing的首地址(VS下测试);
当然与字面理解上是相冲突的,一般理解是pFunc保存了一个地址,*pFunc是获取到pFunc指向地址的内容;我也郁闷啊;
最后加一句,函数名即是一种隐式函数指针;
以上内容属于个人理解和测试,欢迎大牛斧正。另外GNU下的gcc未测试,猜测结果应该是一样的。
- 关于C/C++下 a &a *a的区别,函数指针使用
- 初学 c语言 关于指针------什么是指针 int *a 与 *a的区别
- C++: A a() 和 A a 的区别。
- C指针的探索A
- [C/C++]数组与指针——a,a[0],&a,&a[0]区别小结
- 编写一个使用指针的c函数,交换数组a和数组b中的对应元素
- 转载关于char的c语言指针问题:char **s char *a [ ] char a [ ]
- 关于C语言中的a++,++a,a--,--a;
- C++:关于int *a; int &a; int & *a; int * &a
- a.a 使用了 b.a 则第三方c.*无法直接获取b.a的函数定义
- [C] (++a)*(a++)+(++a)的值是多少?
- [C++] const int *a, int const *a,int * const a,区别,指针数组
- [c/c++]A a();与A a;
- 深入剖析C函数参数的结合顺序及a++和++a的区别
- C语言拾遗:(int)a、&a、(int)&a、(int&)a的区别
- [C/C++]指针解析,char * a, char ** a, char * a[], char a[][], char * a[][], char ** a[][], char * a [][][
- 关于C语言中a=a++与a=++a的研究
- 关于C语言的printf("%d,%d,%d,%d\n",a,++a,a--,a--);
- 黑马程序员_java基础day04
- arm-linux-objdump 参数
- 好网站
- NYOJ 502 筹建工程 避圈法 并查集
- oracle视图更新,替代触发器
- 关于C/C++下 a &a *a的区别,函数指针使用
- oracle锁表
- 栈
- 个人作品—个人计划管理应用todolist—演示视频
- 递归方法判断数组是否为递增数组
- DTM DEM DSM 介绍
- shell数组
- ACM里的一些缩写
- POJ 1724