标题:
关于C语言结构体用法的疑惑
[打印本页]
作者:
hxdby
时间:
2022-5-12 14:42
标题:
关于C语言结构体用法的疑惑
关于结构体用法的几点疑问,请教大家:
比如定义如下结构体,结构体成员都是指针类型:
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); 这样是否可以?
相信以上我遇到的问题一定也有其他人有这样的疑惑,希望懂结构体和指针的大神不吝赐教!谢谢!
作者:
wojiaoguogai
时间:
2022-5-12 18:31
打印下不就好了?
作者:
Y_G_G
时间:
2022-5-12 20:24
用结构原本是想把事件搞得简单一点,现在感觉好复杂
*(time[0]. datas) 这是把成员time[0]. datas的值用作指针了,指向哪里都不知道
*(time[0]. datas) = *(time[0]. days);先不管右边的,你这个操作是对*(time[0]. datas) 指向的地址的操作
根本不是操作time[0]. datas,也就是说datas这个成员的值不会有任何改变的
又是指针,又是结构体,又是数组的,你自己从头开始写,还有点头绪,旁人一看就觉得绕得晕.........
作者:
物业tuan
时间:
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;
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1