大家好,又见面了,我是你们的朋友全栈君。
最近写c语言中的结构体遇到了些问题,从网上找了些资料如下:
结构体是连续存储的,但由于结构体中成员类型各异,所以会存在内存对齐问题,也就是内存里面会有空档,具体的对齐方式这里 暂不讨论;
1.结构体的定义和赋值
结构体是可以直接初始化的,在定义的时候,就可以初始化,而且如果你的结构体中恰好有字符数组的话,这个时候初始化是不错的选择,原因很简单,字符数组只能定义的时候直接初始化
后来就不可以了,后来你就只能用strcpy函数来拷贝初始化了。
struct 结构体名
{
数据类型 成员名1;
数据类型 成员名2;
:
数据类型 成员名n;
};
2.定义结构体变量的3种方法:
第1种:
struct 结构体名
{
成员列表;
}变量名1;
第2种:
struct 结构体名
{
成员列表;
};
struct 结构体名 变量名2;
第3种:
typedef struct 结构体名
{
成员列表;
}结构体别名;
结构体别名 变量名3;
访问结构体成员的2种方式:
1、直接访问:结构体变量名.成员名
2、指针访问:结构体变量指针->成员名
3.结构体初始化操作
1. struct 结构体名 变量名 = {0,0,0,...};
2. struct 结构体名 变量名 =
{
.成员1 = 0,
.成员2 = 0,
.成员3 = 0,
...
};
3. struct 结构体名 变量名 =
{
成员1: 0,
成员2: 0,
成员3: 0
};
第2、3种方式成员顺序可以打乱,甚至可以只初始化其中某几个成员。3种初始化的方式在linux下使用GCC编译均可通过。
4.结构体定义时的嵌套
1、内部的结构体名称定义齐全
struct student
{
int a;
int b;
struct other
{
int c;
int d;
}name;
};
引用c成员的方式: 变量.name.c
struct student
{
int a;
int b;
struct
{
int c;
int d;
};
};
引用c成员的方式:变量.C
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/161042.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...