| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1431 人关注过本帖
标题:求助:关于typedef和结构体问题
只看楼主 加入收藏
wkyj
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2021-2-17
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:3 
求助:关于typedef和结构体问题
程序代码:
typedef struct {
    ril_cmd_id_t cmd_id;    /**< A unique ID  */
    ril_request_mode_t mode;    /**< AT command mode, */
    ril_result_code_t res_code;    /**< Final response code */
    void *cmd_param;    /**< A pointer to the subparameter structure, user should cast it to the right data structure specified for each command. */
    char *test_mode_str;    /**< A pointer to the response string  */
    uint32_t test_mode_str_len;    /**< The response string  */
} ril_cmd_response_t;

typedef int (*ril_cmd_response_callback_t)(ril_cmd_response_t *response);

extern  ril_status_t   ril_request_query_network_state(ril_request_mode_t mode,
        int32_t display_mode,
        ril_cmd_response_callback_t callback,
        void *user_data);


    问题:1,我知道代码中ril_cmd_response_t是结构体,但是 typedef int (*ril_cmd_response_callback_t)(ril_cmd_response_t *response);又是什么?
          2,如何读取 ril_cmd_response_callback_t定义的callback变量中的结构体成员?
          3,谢谢
搜索更多相关主题的帖子: response typedef the string 结构体 
2021-02-17 10:54
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:336
专家分:1135
注 册:2014-4-13
收藏
得分:10 
准确的说ril_cmd_response_t是结构体类型,作用是能声明或定义变量及其指针,typedef int (*ril_cmd_response_callback_t)(ril_cmd_response_t *response也是为一种类型起了个名字,ril_cmd_response_callback_t是类型名,这个类型是一个函数指针,返回值为int类型,函数参数是ril_cmd_response_t *response ,就是前面定义的结构体类型的指针,
“如何读取 ril_cmd_response_callback_t定义的callback变量中的结构体成员?”你理解有误,前面说过 ril_cmd_response_callback_t 是个类型名,是函数指针类型,所以callback变量是个函数指针,只是函数的参数是个结构体指针。
2021-02-17 15:19
wkyj
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2021-2-17
收藏
得分:0 
回复 2楼 jklqwe111
谢谢!
2021-02-17 16:48
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:0 
这是typedef的应用:
举例: typedef int a;
              a  b; // a b;等同 int b;
而在结构体的应用:
结构体在c语言中的语法是这样的:
     struct struct_name {
                         类型1 成员1;
                         类型2 成员2;
                         };
            struct_name  b;//这就声明并定义了 一个名为struct_name结构体的变量b;
若在加上 typedef 那就不需要 struct_name 而是在后面加上一个别名b,b意思是代表整个结构体,但它与上面的不一样,它不是变量:
   typedef  struct {
                         类型1 成员1;
                         类型2 成员2;
                         } b;
            ;//声明结构体的别名b;(别名就是另外的一个名字,随便取,只要符合字符的规则)
把上面两个合起来就有:
typedef int (* fun)(b *res);//形似typedef int (*ril_cmd_response_callback_t)(ril_cmd_response_t *response);
如何知道哪个是别名 去掉所有的类型就可以找到了
c语言中类型的是用前缀表达式,也就是放在最左边的就是类型,其中*号也是类型
int (*fun)(b* res);的类型是int (*) (b*)  
去掉后得fun res,但是也可以去掉res,因为函数的参数名在声明的时候是可以为空,这个你反汇编就知道了,那个有类型就可以了
所以 typedef int (* fun)(b *res); 中的fun 代表 int (*)(b*)的一个整体;
           fun a; 等同于 int (*)(b*)    a;不过这样写是不合法的
看下面例子:
#include "stdio.h"
#include "conio.h"
 int a()
 {
   printf("a\n");
 }

typedef int (*p)();
p b;
main()
{
    printf("Hello, world\n");
    b=a;
    b();
    getch();
}
输出的结果是
Hello,world
a

1、所以typedef int (*ril_cmd_response_callback_t)(ril_cmd_response_t *response);的意思
是声明了一个  int(*)(ril_cmd_response_t*) 的别名ril_cmd_response_callback_t,它的调用类似上面所述。
2、如何读取 ril_cmd_response_callback_t定义的callback变量中的结构体成员?
callback是一个函数变量,它的参数是一个结构体,要读取函数的参数内容,那就是直接调用参数来读取

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2021-02-17 16:57
快速回复:求助:关于typedef和结构体问题
数据加载中...
 
   



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

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