OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6331|回复: 9

typedef和函数、指针问题

[复制链接]

22

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2012-6-14
在线时间
0 小时
发表于 2014-5-14 00:51:20 | 显示全部楼层 |阅读模式
5金钱
最近遇到这种情况: 
b是一个结构体名。
typedef int (*a)(b**c);
这样定义了 a就变“类型”了,不是“变量”了对吧?

如何下的定义函数方式那个正确啊!我看到有两种都用的。还是我理解上有问题。师兄们帮我分析一下!!
a(&c){}和a d(&c){};这两个函数那个正确啊为什么??我就是有点糊涂了!!

最佳答案

查看完整内容[请看2#楼]

回复【2楼】ofourme: --------------------------------- 改个名字可能就好理解了。 (*Fun) ( StructT    **c)     是个函数指针类型。 typedef int (*Fun) ( StructT    **c)    定义一个类型  用这个类型声明 Fun fun1; 等价于: int *fun1 ( StructT  & ...
越是自由的环境中越要自律
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2014-5-14 00:51:21 | 显示全部楼层
回复【2楼】ofourme:
---------------------------------
改个名字可能就好理解了。
(*Fun) ( StructT    **c)     是个函数指针类型。
typedef int (*Fun) ( StructT    **c)    定义一个类型 

用这个类型声明
Fun fun1;
等价于:
int *fun1 ( StructT    **c){}
回复

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1865
金钱
1865
注册时间
2011-3-29
在线时间
140 小时
发表于 2014-5-14 01:38:47 | 显示全部楼层
题目没看明白。楼主请先把错别字、句式改正吧。

还有下面的内容也没看明白,请楼主解释:

typedef int (*a)(b**c); ---> 没看明白 “**c” 是什么。
a(&c){}和a d(&c){} ---> “d”是什么?如果是函数调用的话为什么加上花括号?
业余程序玩家。
回复

使用道具 举报

15

主题

180

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
348
金钱
348
注册时间
2013-4-23
在线时间
25 小时
发表于 2014-5-14 09:14:56 | 显示全部楼层
给2楼点赞。。
回复

使用道具 举报

22

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2012-6-14
在线时间
0 小时
 楼主| 发表于 2014-5-14 10:19:35 | 显示全部楼层
回复【2楼】ofourme:
---------------------------------
不哈意思,可能变量和格式没有定义好!2楼师兄帮我更正了一下!再次感谢!

回复【3楼】aleda303:
---------------------------------
师兄还是有个问题想你请教!
(*Fun) ( StructT    **c)     是个函数指针类型。 
typedef int (*Fun) ( StructT    **c)    定义一个类型  

用这个类型声明 
Fun fun1; 
等价于: 
int *fun1 ( StructT    **c){}

如果现在有如下的表达式你看是不是正确;
1、Fun  fun2;
2、if(fun2(&buf)== 1)
    {
        执行这里面内容?
    }
这样表达有没有问题!该如何表达才是正确。问了同事他也说不出来!

2楼的师兄帮忙看看!!
越是自由的环境中越要自律
回复

使用道具 举报

15

主题

180

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
348
金钱
348
注册时间
2013-4-23
在线时间
25 小时
发表于 2014-5-14 11:01:01 | 显示全部楼层
回复【5楼】bingge191:
---------------------------------
用这个类型声明  
Fun fun1;  
等价于:  
int *fun1 ( StructT    **c){} 这里有笔误,int (*fun1) ( StructT    **c),
--------------------------------------------
如果现在有如下的表达式你看是不是正确; 
1、Fun  fun2; 
2、if(fun2(&buf)== 1) 
    { 
        执行这里面内容? 
    } 
这个句子可行,前提是fun2得调用一个函数,buf得定义为int*类型。
回复

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2014-5-14 12:05:51 | 显示全部楼层
回复【5楼】bingge191:
---------------------------------
** p 是指向指针的 指针。

比如 char *buf 
fun2(&buf), buf不能是数组, 
可以强制转换为指针:

& ( (u8*)&buf)  

你试下吧 。 也有可能不对...
回复

使用道具 举报

22

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2012-6-14
在线时间
0 小时
 楼主| 发表于 2014-5-15 11:06:05 | 显示全部楼层
回复【6楼】wobukansanguo:
---------------------------------
您好!非常感谢您解答,我基本看明白了!

但是还是有些小问题:
一、1、Fun  fun2;  
     2、if(fun2(&buf)== 1)  
    {  
        执行这里面内容?  
    }  
    这个句子可行,前提是fun2得调用一个函数(??if语句里面就是一个函数表达式!fun2此时是作为一个函数名字,语句1中fun2是被定义的一个类型变量吧!!),buf得定义为int*类型。
--------------------------------------------------------------------------------------------
*****************************************************************
---------------------------------------------------------------------------------------------
问题2:
在同一个***.c文件下!

              char              *ptr_to_char;            // 声明ptr_to_char为一个指向字符的指针
 typedef  char               ptr_to_char;             // 对ptr_to_char该怎么理解??
              ptr_to_char       pch;                    // 这里改怎么理解 ptr_to_char 和 pch的关系??
越是自由的环境中越要自律
回复

使用道具 举报

22

主题

83

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2012-6-14
在线时间
0 小时
 楼主| 发表于 2014-5-15 11:18:38 | 显示全部楼层
回复【7楼】aleda303:
---------------------------------
您说我知道,能不能帮我看看我下面的回复!!谢谢
越是自由的环境中越要自律
回复

使用道具 举报

15

主题

180

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
348
金钱
348
注册时间
2013-4-23
在线时间
25 小时
发表于 2014-5-15 11:37:53 | 显示全部楼层
回复【8楼】bingge191:
---------------------------------
这个句子可行,前提是fun2得调用一个函数(??if语句里面就是一个函数表达式!fun2此时是作为一个函数名字,语句1中fun2是被定义的一个类型变量吧!!)
这个fun2是一个函数指针,你得给他一个函数入口地址,简单的说就是假如你有一个函数  int  max(int **n){return 1;},在使用if(fun2(&buf)== 1)前,你得把函数指针指向函数max。
----------------------------------------------------------------------------------------------------------------------------------------------------
第二个问题表示会重复定义。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-8 07:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表