OpenEdv-开源电子网

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

关于结构体类型数据的初始化

[复制链接]

74

主题

334

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
436
金钱
436
注册时间
2015-5-28
在线时间
144 小时
发表于 2018-2-4 14:27:02 | 显示全部楼层 |阅读模式
1金钱
看别人的代码,是这样的:
[mw_shl_code=c,true]struct Student{
   char A;
   char B;
   char C;
   
};
//定义结构体类型数组
struct Student Test[2] ={
     {
       .A = 'x',
       .B = 'y',
       .C = 'z',
     } ,

    {
       .A = '1',
       .B = '2',
       .C = '3',
     } ,
};[/mw_shl_code]

我不明白的是这里的数组初始化.A .B .C 的用法,要是按我的知识,初始化直接将{'x','y','z'}像这样的值放进去了,请问这是怎样的用法呢?之前从没见过。

最近爱上了stm32
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

17

主题

181

帖子

0

精华

高级会员

Rank: 4

积分
504
金钱
504
注册时间
2017-7-24
在线时间
117 小时
发表于 2018-2-4 18:55:50 | 显示全部楼层
这个是你举得例子么?可不可以把代码发一下?
回复

使用道具 举报

74

主题

334

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
436
金钱
436
注册时间
2015-5-28
在线时间
144 小时
 楼主| 发表于 2018-2-4 20:52:23 | 显示全部楼层
q247341184 发表于 2018-2-4 18:55
这个是你举得例子么?可不可以把代码发一下?

[mw_shl_code=c,true]typedef struct Task
{
        TaskRole Role;
       
        void (*RunHook)(struct Task *);
        u32 RunItvMs; //SYSTICK_ITV_MS 的整数倍
        u32 RunItvPass;
        bool RunTrigged;
       
//用StatePtr指针可省去没有状态的Task的内存占用,和适应不同的状态数据结构       
        void (*Init)(struct Task *); //初始化StatePtr等
        void * StatePtr;        //0|2|3|4需要ReadMeterState(sizeof()=76B) MinTaskSizeof()=30B * 7(MaxTasks) -> 512B
}Task;

Task gTasks[] =
{
        {
                .Role = TaskRole_PortAck,
                .RunHook = PortsAckHandle,
                .RunItvMs = 100,
                .Init = NULL,
        },
        {
                .Role = TaskRole_PortRead,
                .RunHook = PortsTimingRead,
                .RunItvMs = 1000,
                .Init = NULL,
        },
}[/mw_shl_code]
最近爱上了stm32
回复

使用道具 举报

74

主题

334

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
436
金钱
436
注册时间
2015-5-28
在线时间
144 小时
 楼主| 发表于 2018-2-4 20:53:10 | 显示全部楼层
q247341184 发表于 2018-2-4 18:55
这个是你举得例子么?可不可以把代码发一下?

一个样,按原代码做的模
最近爱上了stm32
回复

使用道具 举报

17

主题

181

帖子

0

精华

高级会员

Rank: 4

积分
504
金钱
504
注册时间
2017-7-24
在线时间
117 小时
发表于 2018-2-4 21:00:26 | 显示全部楼层
可能是为了方便后面的调用?一旦调用gTask[0]则直接赋值到结构体数组的第一个变量里。比如说gTask[0]是状态1,那另一个就是状态2。这是我的猜测
回复

使用道具 举报

74

主题

334

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
436
金钱
436
注册时间
2015-5-28
在线时间
144 小时
 楼主| 发表于 2018-2-4 21:26:18 | 显示全部楼层
q247341184 发表于 2018-2-4 21:00
可能是为了方便后面的调用?一旦调用gTask[0]则直接赋值到结构体数组的第一个变量里。比如说gTask[0]是状态 ...

网上找了一下,这个貌似是C99标准,C99标准 这样可以支持指定成员的初始化
最近爱上了stm32
回复

使用道具 举报

7

主题

199

帖子

0

精华

高级会员

Rank: 4

积分
711
金钱
711
注册时间
2017-5-20
在线时间
96 小时
发表于 2018-2-5 10:38:08 | 显示全部楼层
这是结构体初始化的一方式。使用.成员初始化,可以不按顺序。直接{'x','y','z'}是按顺序的。
回复

使用道具 举报

74

主题

334

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
436
金钱
436
注册时间
2015-5-28
在线时间
144 小时
 楼主| 发表于 2018-2-5 12:56:39 | 显示全部楼层
林光华ing 发表于 2018-2-5 10:38
这是结构体初始化的一方式。使用.成员初始化,可以不按顺序。直接{'x','y','z'}是按顺序的。

是的,C99才支持
最近爱上了stm32
回复

使用道具 举报

74

主题

334

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
436
金钱
436
注册时间
2015-5-28
在线时间
144 小时
 楼主| 发表于 2018-2-5 14:15:20 | 显示全部楼层
林光华ing 发表于 2018-2-5 10:38
这是结构体初始化的一方式。使用.成员初始化,可以不按顺序。直接{'x','y','z'}是按顺序的。

结构体中的函数指针形参为结构体本身不太理解,
最近爱上了stm32
回复

使用道具 举报

7

主题

199

帖子

0

精华

高级会员

Rank: 4

积分
711
金钱
711
注册时间
2017-5-20
在线时间
96 小时
发表于 2018-2-5 14:24:42 | 显示全部楼层
带我足够强大 发表于 2018-2-5 14:15
结构体中的函数指针形参为结构体本身不太理解,

函数指针也是指针。其实函数指针比普通指针更加简单。函数指针就是一个变量,至少一般不会出现复制结构体时成员指针带来的深度复制还是简单复制问题。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 05:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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