结构体初始化的几种方法(结构体变量的初始化)
本文目录
结构体变量的初始化
结构体变量简称为结构变量,它由结构类型定义,有三种定义方法。下面以定义结构类型 book 和结构变量mybook 、 storybook 为例说明之。
1. 先定义结构类型,再定义结构变量。
struct book /* 定义结构体类型 */
{
char bookname;
float price;
char publisher;
char author;
} ;
struct book mybook, storybook;
用这种方法定义结构变量,是最常用的方法,但须注意不能省略关键字“ struct ”。还可以在定义结构变量的同时给它的成员赋初值。如:
struct book /* 定义结构体类型 */
{
char bookname;
float price;
char publisher;
char author;
} ;
struct book mybook = { “maths”, 24.7, “ 电子社 ”, “zhao” }, storybook;
则, mybook 变量的 price = 24.7 。
2. 定义结构类型的同时定义结构变量。
struct book /* 定义结构体类型 */
{
char bookname;
float price;
char publisher;
char author;
} struct book mybook, storybook;
3. 不定义结构类型,直接定义结构变量。
struct /* 不定义结构类型名 */
{
char bookname;
float price;
char publisher;
char author;
} struct book mybook, storybook;
需要说明的是,当某结构类型的成员又是另外一个结构类型时,称嵌套定义,其定义方法如下:
struct brith_date
{
int month ;
int day ;
int year ;
} ;
struct
{
char name ;
char address;
char tel;
int age;
struct data birthday;
char ***;
} student_01 , employee ;
此例直接定义了 student_01 和 employee 两个变量,但是没有定义此结构体的名字,因此不能再定义与student_01 和 employee 同类的其它结构变量了!如下行定义是错误的:
truct boy, girl;
如何对结构体变量初始化
有3种方法可以初始化结构体变量,我分别用std0,std1和std2来剧烈,方法如下,这个程序已经在vc6里面通过调试了
#include《stdio.h》
#include《string.h》
struct Student
{
int number;
char name;
}std0={100,"name0"};
void main()
{
struct Student std1={101,"name1"};
struct Student std2;
std2.number=102;
strcpy(std2.name,"name2");
printf("std0:%d\t%s\n",std0.number,std0.name);
printf("std1:%d\t%s\n",std1.number,std1.name);
printf("std2:%d\t%s\n",std2.number,std2.name);
}
C++ 结构体如何初始化
有以下几种方法:
1 使用构造函数。
在C++中,struct可以当做类(class)来使用,同样支持成员函数,构造函数,析构函数。所以可以写对应的构造函数,实现自由初始化。
2 定义时,按照成员变量位置,写初始化列表。
如struct test中有成员int a, char b, 和float c,那么初始化一个变量可以写作
struct test t1 = {100, ’A’, 1.23};
当初始化列表不全时,省略部分自动初始化为0,即
struct test t1 = {100, ’A’};
和
struct test t1 = {100, ’A’, 0};
等效。
3 部分编译器支持显示成员变量初始化,如g++。
如
struct test t1 = {.b= ’A’, .a=100};
没有涉及到的变量初始化为0.该种方式不是所有编译器都支持,当代码有跨平台需求时需谨慎使用。
如何用函数初始化结构体
一、若类和结构体所有数据成员均为public型,可采取如下带花括号形式进行初始化。
注意:
① 不论值的个数多少,都必须使用花括号定界
② 未指定值的数据成员编译器会自动初始化为默认值
③ 这种初始化对象方式,要求所有数据成员必须为public型
④ 这种初始化对象方式,要求类中不能编写任何构造函数
struct S { //class S 效果一样
int x;
unsigned short y;
};
S testS1={100,123};
S testS2={200};//未指定值的数据成员初始化为默认值,这里os2.y=0;
S TestS={ {100,10},
{200,20},
{300} };//未指定值的初始化为默认值,os.y。
《windows核心编程》中我们会遇到:STARTUPINFO si = { sizeof(si) } ,就是对si结构体的初始化。
二、若数据成员有private或protected型,或是提供了构造函数,必须使用构造函数来进行初始化。
struct S { //class S可自行试验,结果相同
private:
int x;
public:
double y;
S(void){}
S(int idemo,double ddemo) {x=idemo;y=ddemo;}
void show(void) {cout《《x《《’’\t’’《《y《《endl;}
};
S os1;//将调用默认构造函数(无参构造函数)
S os2(1000,2.345);
S os3=S(2000,4.567);
S os={S(10,1.234),S(20,2.234)};//未初始化的将调用默认构造函数。如此时没有默认构造函数会出错。
重要提示:
①在S os3=S(2000,4.567);语句中,因是声明并初始化os3对象,所以将调用S(int,double)构造函数对os3进行初始化。
②S os3(2000,4.567); 等价于 S os3=S(2000,4.567);
③但如果os3已经存在了,S os3(100,1.234);os3=S(2000,4.567),则表示用一个临时对象赋值给os3,将调用operator=,然后系统再释放这个临时产生的对象。系统默认的=运算是将源对象的数据成员的值复制到目标对象中的数据成员中。
怎么给结构体变量的成员是字符数组初始化
结构体初始化可以在定义的时候,显式初始化,其格式为:
struct type var ={初始化参数列表}
其中初始化参数列表,按照结构体定义的顺序,依次填入对应的值,以逗号隔开,对于空白的部分,系统自动赋值为0。
如
struct test
{
int a;
char c;
float f;
};
定义并初始化可以写作
struct test var = {1, ’c’, 1.23};
对于有字符数组成员的,其初始化格式与字符数组变量初始化类似,可以写作如下两种方式:
struct test
{
char arr;
};
struct test var = {"test"};
以字符串方式初始化。
struct test var = {{’a’,’b’,’c’}};
以数组形式初始化。
c语言如何对结构体某一成员初始化
结构体与类一样可以定义一个构造函数。
如下:
struct s{
s(){
a=0;
}
int a;
};
每次声明一个结构体变量时都会调用结构体的构造函数,在构造函数里面添加初始化语句就可以了
更多文章:
ps教程实例图文教程(PS怎么图片添加逼真彩虹PS添加彩虹图文教程)
2026年4月13日 22:40
apprehensive(apprehensive的词根词缀是什么)
2026年4月13日 22:20
arrayslice是什么意思(javascript中sclice(iStart,[iEnd])是什么意思)
2026年4月13日 22:00
transition四个属性顺序(css3 transition里的属性有先后顺序吗)
2026年4月13日 19:40






