结构体的初始化

本文介绍了结构体的初始化方法,包括在C和C++中的不同处理。C语言中,结构体不能在定义时直接初始化,而需要通过后续的赋值操作。C++11开始支持类内初始化。初始化结构体可以通过定义结构体类型后再定义变量、定义类型同时定义变量或直接定义变量名三种方式。未明确初始化的成员将由系统自动赋予默认值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 结构体的初始化

在结构体外面:定义变量同时可以初始化。  形式如下:
1.变量的初始化:数据类型 变量名=初始化值;
例如,定义整型变量a,并给其初始化值10的语句如下int a=10;
2.数组的初始化,需要通过一常量数据列表,对其数组元素分别进行初始化,形式如下:
数据类型 数组名称〔数组长度〕={初始化值1,初始化值2,…, 初始化值n};
例如,定义长度为5的整型数组,并对其初始化 :int arr[5]={20,21,0,3,4};


但是在定义结构体时不可直接在里面初始化,为什么:

C语言中不允许这么做,结构体外面定义的变量, 不管是局部变量还是全局变量,编译器都要立即给他分配空间。分配了空间之后明确的知道这个变量的位置,初始化就是初始化那块儿内存 。  在结构体里面,  结构体本身的定义并不分配内存,只是声明了一个类型而已,只有定义结构体变量时才会分配内存,所以在里面的初始化语句并不是在编译结构体定义时起作用,而是要等到用结构体定义变量时才起作用
C++中也不允许直接初始化,而是用一个函数来完成你要的初始化工作
后来到C++11,可能是为了方便程序员,标准也开始支持这种类内直接初始化了
 

如何对结构体初始化:

对结构体初始化需要另写一个结构体初始化函数或通以下三个方法

方一:先定义结构体类型再定义变量
struct 结构体标识符
{
成员变量列表;

};
struct结构体标识符 变量名={初始化值1,初始化值2,…, 初始化值n };

例如:
 struct student
 {
    int  ID;
    char name[10];
    float score;
 } 
 
int main()
{
//定义结构体类型后赋值 
 struct student zhang;
 strcpy(s1.name,"s1");
 s1.SID=1;
 s1.score=89;
}


方二:定义类型同时定义变量    

struct Point
{
double x;
double y;
double z;
} P1={0.0,0.2,0.3};

 

方三:直接定义变量名,无结构体名

struct  //无结构体名
        {
                  成员列表;
        }变量名; 

struct
{
int  a;
double y;
int  z;
} P1={5,0.2, 3};


在初始化结构体变量时候,既可以初始化其全部成员变量,也可以仅仅对其中部分的成员变量进行初始化。其他没有初始化的成员变量由系统完成初始化,为其提供缺省的初始化值。例如:
struct Student
{
long id;
char name[20];
char sex;
}a= {0};
其相当于a.id=0;a.name=“”;a.sex=‘\0x0’。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值