找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 626|回复: 3
打印 上一主题 下一主题
收起左侧

关于C语言结构体用法的疑惑

[复制链接]
跳转到指定楼层
楼主
ID:997026 发表于 2022-5-12 14:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
关于结构体用法的几点疑问,请教大家:

比如定义如下结构体,结构体成员都是指针类型:

unsigned int     date_temp0=0;
unsigned int     day_temp0=0;
unsigned char  year_temp0=0;

unsigned int     date_temp1=0;
unsigned int     day_temp1=0;
unsigned char   year_temp1=0; //全局变量



typedef struct  abc{

unsigned int*     dates;
unsigned int*     days;
unsigned char*   years;

} timeset;



//定义一个结构体数组并初始化
//这里有个疑问,我把上述全局变量作为结构体数组的成员,这样可以吗?我试着编译之后,编译器并没有报错。
timeset   time[2] ={ {&date_temp0, &day_temp0, &year_temp0 }, {&date_temp1, &day_temp1, &year_temp1} };


//如果我要取结构体初始化数组里的元素,是否可以用如下方法
unsigned int*  temp0;
temp0 = time[0]. datas; //实际上取出来的是指针,相当于temp0 = &date_temp0; 这个理解对吗?


//如果我想取地址上的内容,如下
*(temp0) = *(time[0]. datas); //这种表示方法是否正确呢?还是应该这样:*(temp0) = *(time[0]). datas;  ?


//结构体数组里面的成员可以相互赋值吗?
比如:
*(time[0]. datas) = *(time[0]. days); //这样是否可以?也就是相当于:*(&date_temp0) = *(&day_temp0); 这样是否可以?



相信以上我遇到的问题一定也有其他人有这样的疑惑,希望懂结构体和指针的大神不吝赐教!谢谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:415064 发表于 2022-5-12 18:31 | 只看该作者
打印下不就好了?
回复

使用道具 举报

板凳
ID:401564 发表于 2022-5-12 20:24 | 只看该作者
用结构原本是想把事件搞得简单一点,现在感觉好复杂
*(time[0]. datas) 这是把成员time[0]. datas的值用作指针了,指向哪里都不知道
*(time[0]. datas) = *(time[0]. days);先不管右边的,你这个操作是对*(time[0]. datas) 指向的地址的操作
根本不是操作time[0]. datas,也就是说datas这个成员的值不会有任何改变的
又是指针,又是结构体,又是数组的,你自己从头开始写,还有点头绪,旁人一看就觉得绕得晕.........
回复

使用道具 举报

地板
ID:656668 发表于 2022-5-13 01:00 | 只看该作者
一、关于结构体

在C语言中,结构体(struct)指的是一种数据结构,是C语言中复合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
结构体的定义如下所示:
struct tag { member-list } variable-list;
其中:
struct为结构体关键字;
tag为结构体的标志;
member-list为结构体成员列表,其必须列出其所有成员;
variable-list为此结构体声明的变量。
在一般情况下:tag、member-list、variable-list这3部分至少要出现2个。
二、结构体常规定义
不同的定义,应用在不同场景,所以,我们编程时需要结合实际情况来定义结构体。
方法1:
定义结构体stu,此时结构体相当于一个类型,比如int,如需使用此结构体,方法同int.
struct stu{    char  aa;    short bb;    int   cc;};
struct stu stu1, stu2;
方法2:
定义结构体stu同时定义需要使用的结构体变量stu1, stu2。如后面再需要定义结构体变量,方法同1.
struct stu{    char  aa;    short bb;    int   cc;}stu1, stu2;
struct stu stu3;
方法3:
定义结构体时,结构体名称缺省,同时定义结构体变量stu1,stu2。但后面不可再定义结构体变量。
struct{    char  aa;    short bb;    int   cc;}stu1, stu2;
三、使用typedef定义结构体
在C和C++编程语言中,typedef是一个关键字。它用来对一个数据类型取一个别名,目的是为了使源代码更易于阅读和理解。它通常用于简化声明复杂的类型组成的结构 ,但它也常常在各种长度的整数数据类型中看到,例如size_t和time_t。
方法4:
使用typedef定义结构体同时,给stu结构体别名STU,后续定义可不用使用struct stu,直接使用STU即可。
typedef struct stu{    char  aa;    short bb;    int   cc;}STU;
STU stu1;
方法5:
使用typedef定义结构体时,省掉结构体第一个别名stu,直接在后面加STU,使用方法同上。
typedef struct{    char  aa;    short bb;    int   cc;}STU;
STU stu1;
方法6:
typedef struct stu{    char  aa;    short bb;    int   cc;};
struct stu stu1;
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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