标题:关于辨析函数类型与函数指针类型,小白求解!!!!!!
只看楼主
郑江苇
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2015-1-25
结帖率:50%
已结贴  问题点数:10 回复次数:18 
关于辨析函数类型与函数指针类型,小白求解!!!!!!
#include <stdio.h>

void hello(void)
{}

int main(void)
{
void (*hello_ptr)(void);

printf("hello:%p\n",hello);
printf("&hello:%p\n",&hello);
printf("*hello:%p\n",*hello);

hello_ptr=hello;
printf("hello_ptr=hello;\n");

printf("hello_ptr:%p\n",hello_ptr);
printf("&hello_ptr:%p\n",&hello_ptr);
printf("*hello_ptr:%p\n",*hello_ptr);

return 0;
}



我理解是 hello函数 首地址是004012F0 所以 第一条输出语句
printf("hello:%p\n",hello);
输出是其首地址(函数名做右值,自动加取地址符&?)输出是004012F0
第二条语句
printf("&hello:%p\n",&hello);
就是正常的输出的函数的首地址004012F0
第三条也纠结  理解为 函数hello 返回空类型 ??然后就直接输出地址了???
hello_ptr=hello;  hello首地址给函数指针类型hello_ptr
第五条 与第一条一个道理 函数首地址前 自动补&  所以输出的还是地址
第六条 已经给出&  可是现在是取得函数指针的地址
第七条 跟第三条一样纠结。。
可以解释一下吗
搜索更多相关主题的帖子: include return hello 
2015-01-25 20:43
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
函数可隐式降级为函数指针
举个例子 hello_ptr = ********************hello;
hello类型为void(void),要想解引用得先降为void(*)(void),然后通过*又升回void(void),所以无论解引用多少次都可以
2015-01-26 08:43
郑江苇
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2015-1-25
得分:0 
回复 2楼 rjsp
那这一条怎么理解呢  printf("*hello:%p\n",*hello);   为什么输出是函数hello的地址呢
2015-01-26 14:34
朱大哥
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:72
专家分:123
注 册:2015-1-16
得分:0 
函数名hello是个常量 函数代码的首地址值   你对它操作个什么呢  
2015-01-26 14:41
郑江苇
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2015-1-25
得分:0 
回复 4楼 朱大哥
恩恩   我就是看看  首地址是多少啊    然后  我又想看看这个 printf("*hello:%p\n",*hello);    是不是 hello  函数的 返回值   可是还是看到跟hello的地址一样啊
2015-01-26 15:05
朱大哥
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:72
专家分:123
注 册:2015-1-16
得分:0 
回复 5楼 郑江苇
函数定义 是告诉编译器 这有一块代码
函数名 起到的是一个 标号的作用,而不是变量标识符的作用
2015-01-26 15:08
朱大哥
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:72
专家分:123
注 册:2015-1-16
得分:0 
所以 对变量的操作 对它是没用的
你不信 你给 hello赋值 看看

2015-01-26 15:09
郑江苇
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2015-1-25
得分:0 
回复 6楼 朱大哥
还是不懂啊 啊     那加*号对函数名 进行操作   结果 怎么跟地址 一样啊
2015-01-26 15:15
郑江苇
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2015-1-25
得分:0 
回复 7楼 朱大哥
hello:004012F0
&hello:004012F0
*hello:004012F0
hello_ptr=hello;
hello_ptr:004012F0
&hello_ptr:0022FF44
*hello_ptr:004012F0
请按任意键继续. . .
2015-01-26 15:18
朱大哥
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:72
专家分:123
注 册:2015-1-16
得分:0 
函数名不是变量   ok  

2015-01-26 15:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-441466-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017688 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved