当前位置: 首页 > 工具软件 > CStruct > 使用案例 >

linux C 结构体struct的定义和初始化

赵修诚
2023-12-01

struct 定义:

struct test
{
int a;
long b;
float c;
char d;
char e[];
}tt1,tt2;//对象声明列表紧跟struct定义
struct test tt3,tt4;//单独声明对象列表

//声明一个没结构体名字的结构体
struct
{
int a;
long b;
float c;
char d;
char e[3];
}tt1={2,3,3.2,'c',"tyu"},tt2={2,3,3.2};//必须顺序赋值,但可以不赋值所有成员

struct初始化:
1,//按顺序初始化
struct test  t1={1,2,1.23,'h',"gsdhf"};
2,//乱序
struct test t2=
{
.a=1,
.b=2,
.c=1.23,
.d='h',
.e="gsdhf"
};
注意:
1,如果存在部分成员没初始化,一般值是系统默认值。
2,如果即存在乱序又存在顺序初始化,顺序初始化始终紧跟上一个乱序成员,即该顺序赋值给上一个乱序成员的下一个成员。如:
    struct test tt=   
    {   
        .c = 18.90,                    
        .b= 2,                    
        0.25   //成员之间赋值时是","分开,不是";",且最后一个成员没有","
    };    

0.25的值将付给成员b后的那个成员c,即之前给c赋值18.90将被0.25取代。

当然如果顺序赋值前无乱序赋值,则按struct定义成员的顺序进行赋值,后面的乱序赋值则覆盖前面的顺序赋值。


自定义struct 类型
typedef struct test
{
int a;
long b;
float c;
char d;
char e[];
};
test tt;//test现在是自定义数据类型了,和int,char等数据类型的使用是一样的
tt=
{
.a=1,
.b=2,
.c=1.23,
.d='h',
.e="gsdhf"

 

};

 

注意:也可先定义struct test,然后使用语句typedef struct test tt;或者typedef struct test;test tt;来自定义struct数据类型并声明对象。

 类似资料: