关于引用

来源:百度知道 编辑:UC知道 时间:2024/06/06 18:14:58
#include <stdio.h>

typedef void (*pf)();

void foo()
{
puts("foo");
}

int main()
{
pf p = foo; // 或pf p = &foo;
p();
return 0;
}

这里pf p = foo为什么和pf p = &foo一样呀,stainly提过这个问题。

还有

如果定义int a[50];

为什么a和&a都表示一个东西??

引用怎么这么难~~~

在此希望各位大侠指教,多谢!!
抱歉,是stainboy,不是stainly,在此更正!

代码引用自 飘渺世间天

那我想引用数组a的首地址,怎么办?

就是

p->a
a->a[0]

我想查看p,有办法么?

&是取变量地址,或者是位运算的与。
这里好像 &符号就是表示传给它地址,这样它才可以把输入的东西放在那个地址里面啊。如果你给它字符数组,就可以用数组名了(虽然它也可以理解成指向第一个元素的指针。

不是让你输入物理地址,但是该函数需要传入地址来存放输入结果。

typedef void (*pf)();

void foo()
{
puts("foo");
}

int main()
{
pf p = foo; // 或pf p = &foo;
printf("foo=%x, &foo=%x\r\n",foo,&foo);
p();
return 0;
}

1.你会发现printf("foo=%x, &foo=%x\r\n",foo,&foo);这两个打出来的值一样,表明函数名,和加一个地址符代表的都是函数的地址。
2.而int a[50];
a代表数组名,同时它也是代表这个数组的首地址,&a也代表的是数组的首地址。

用同样的方法:
int a[50];
printf("a=%x, &a=%x\r\n",a,&a);
你会发现它们的值是同一个值,即代表的同一个地址。

楼主用200的高分问这个问题,可见对C语言的细节很重视。

数组a[50],a表示整个数组的指针,&a表示的是a[0]的指针。意义不同,但结果一样。
foo也是如此。在C语言和所有的高级语言中,数组或函数名都代表“指针”,如果前面再加一个取地址符号&的话,就是取整个数组或函数中第一个内容的地址。它们的意义稍不同,但结果都是一样。

在此,&是取址操作符,作用是取得一个内存对象的地址,所以,p=&foo就是取得foo的地址,并保存在p中,而在C中函数名被编译器当作是函数指针对待,所以p=foo就相当于p=&foo,数组名也被