| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 837 人关注过本帖, 2 人收藏
标题:关于辨析函数类型与函数指针类型,小白求解!!!!!!
取消只看楼主 加入收藏
郑江苇
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2015-1-25
结帖率:50%
收藏(2)
已结贴  问题点数:10 回复次数:7 
关于辨析函数类型与函数指针类型,小白求解!!!!!!
#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
郑江苇
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2015-1-25
收藏
得分:0 
回复 2楼 rjsp
那这一条怎么理解呢  printf("*hello:%p\n",*hello);   为什么输出是函数hello的地址呢
2015-01-26 14:34
郑江苇
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2015-1-25
收藏
得分:0 
回复 4楼 朱大哥
恩恩   我就是看看  首地址是多少啊    然后  我又想看看这个 printf("*hello:%p\n",*hello);    是不是 hello  函数的 返回值   可是还是看到跟hello的地址一样啊
2015-01-26 15:05
郑江苇
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: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2015-1-25
收藏
得分:0 
回复 10楼 朱大哥
printf("*hello_ptr:%p\n",*hello_ptr);  那这一句呢      函数指针 hello_ptr    加*  结果时函数地址   是不是说 要调用函数  要用 (*hello_ptr)(参数) 然后这里没有参数  所以编译器 就直接又规定成 hello 的首地址值  这么理解吗??
2015-01-26 16:00
郑江苇
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2015-1-25
收藏
得分:0 
回复 14楼 wp231957
恩恩  谢谢哈   
不过汇编真心看不懂额  
第一个hello  返回 函数首地址   属于正常操作
第二个 和 第三个  因为hello是函数名   是一个标号   所以对它 * & 操作 没意义  视编译器而言 给出了地址值

第一个hello_ptr 跟hello一样   
第二个 因为 hello_ptr 是变量  所以 取了它的地址
第三个 还是 没有意义的操作  因为  调用函数  要(*函数指针)(参数)   所以这里 视编译器 给出地址值  
是这么理解吗??
2015-01-26 16:20
郑江苇
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2015-1-25
收藏
得分:0 
回复 17楼 wmf2014
恩恩  试过了   跟你说的一样啊 啊    谢谢了
2015-01-26 18:46
快速回复:关于辨析函数类型与函数指针类型,小白求解!!!!!!
数据加载中...
 
   



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

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