c语⾔⾥⾯函数voidfunc()取地址func和func值是⼀样的.func的作⽤是什么。。。
c语⾔⾥⾯函数void func() 取地址&func 和 func值是⼀样的 .&func的作⽤是什么,为什么通过编译?
func就是函数的⼊⼝地址,&func⼜是什么?
func是函数名,func是函数的⼊⼝地址;&func是指向函数func的指针(指针跟地址是两个概念),指针的值是函数的地址。但是函数名可以隐式转换成他的函数指针,所以输出func时和&func时是⼀样的.因为经过了这个转换。
有时看到如下的代码:
/*****************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void test()
{
printf("123456\n");
}
int main(int argc, char *argv[])
{
printf("0x%x\n",test);
printf("0x%x\n",&test);
}
[root@H3C]# ./a.out
0x7025368
0x7025368
按照&运算符本来的意义,它要求其操作数是⼀个对象,但函数名不是对象(函数是⼀个对象),本来&test是⾮法的,但很久以前有些编译器已经允许这样做, c/c++标准的制定者出于对象的概念已经有所发展的缘故,也承认了&test的合法性。因此,对于test和&test你应该这样理解,test是函数的⾸地址,它的类型是void (),&test表⽰⼀个指向函数test这个对象的地址,它的类型是void (*)(),因此test和&test所代表的地址值是⼀样的,但类型不⼀样。test是⼀个函数,&test表达式的值是⼀个指针!跟此问题类似的还有对⼀个数组名取地址。
int a[100];
printf("%p\n", a);
函数printf作用 printf("%p\n", &a[0]);
打印值⼀样,但是数组名a,指向的是具有100个int类型的组数;
&a[0]指向的是元素a[0]。即他们的值相同,但指向的类型不同。
转⾃:blog.csdn/weixin_30736301/article/details/102227702
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论