结构体变量初始

合集下载

c语言结构体变量初始化

c语言结构体变量初始化

c语言结构体变量初始化
在C语言中,结构体是一种用户自定义的数据类型,它可以将不同类型的数据组合在一起,形成一个新的复合数据类型。

结构体变量需要初始化后才能使用,以下是关于C语言结构体变量初始化的说明:
1.结构体变量的定义和初始化可以分开进行,也可以同时进行。

2.结构体变量的初始化可以使用以下两种方式:
(1)使用成员列表初始化器:在左花括号后面,用逗号分隔每
个成员的初始化值。

例如:struct student s = { 'John', 20, 'M', 165.5 };
(2)逐个成员初始化:使用'.'操作符,逐个成员进行赋值。

例如:struct student s;
= 'John';
s.age = 20;
s.gender = 'M';
s.height = 165.5;
3.结构体变量可以不全部初始化,未初始化的成员将使用默认的值。

以上就是C语言结构体变量初始化的相关内容,希望对大家有所帮助。

- 1 -。

数组,结构体初始化{0}

数组,结构体初始化{0}

数组,结构体初始化{0}一直以为int a[256]={0};是把a的所有元素初始化为0,int a[256]={1};是把a所有的元素初始化为1.调试的时查看内存发现不是那么一回事,翻了一下《The C++ Programming Language》总算有定论。

PDF的竟然不然复制,就把它这章翻译了,如下5.2.1 数组初始化数组可以用一个列值来初始化,例如int v1[] ={1,2,3,4};char v2[]={'a','b','c',0};当数组定义时没有指定大小,当初始化采用列表初始化了,那么数组的大小由初始化时列表元素个数决定。

所以v1和v2分别为 int[4] 和char[4]类型。

如果明确指定了数组大小,当在初始化时指定的元素个数超过这个大小就会产生错误。

例如:char v3[2] ={'a','b',0}; //错误:太多的初始化值了char v3[3] ={'a','b',0}; //正确如果初始化时指定的的元素个数比数组大小少,剩下的元素都回被初始化为 0。

例如int v5[8]={1,2,3,4};等价于int v5[8]={1,2,3,4,0,0,0,0};注意没有如下形式的数组赋值:void f(){v4={'c','d',0}; //错误:不是数组赋值}如果你想这样的复制的话,请使用vector(16章第三节) 或者valarray(22章第四节)。

字符数组可以方便地采用字符串直接初始化(参考第五章 2.2小节)译注:就是这样啦 char alpha []="abcdefghijklmn";The C++ Programming Language ,Third Edition by Bjarne Stroustrup.、、、、、、、、、、、、、、、、、、、、、、、、、、、////////////////////////////////////////////////////////////////////6.6 集合初始化顾名思义,集合(aggregate)就是多个事物聚集在一起,这个定义包括混合类型的集合:像struct和class等,数组就是单一类型的集合。

简述数组与结构体的区别?并写出结构体变量定义的3种形式。

简述数组与结构体的区别?并写出结构体变量定义的3种形式。

简述数组与结构体的区别?并写出结构体变量定义的
3种形式。

数组与结构体的区别:
1. 数组是一系列同类型的数据集合,而结构体是不同类型的数据集合。

2. 数组中的元素是按照一定次序排列的,可以通过下标方式直接访问和修改,而结构体中的每个成员没有固定的次序,需要通过成员名来访问和修改。

3. 数组的大小在定义时必须给定明确的值,而结构体的大小由其成员变量所占的空间大小决定。

结构体变量定义的3种形式:
1. 结构体变量定义和初始化一步到位:
struct Person {
string name;
int age;
};
Person person = {"Tom", 20};
2. 结构体变量定义后逐个成员变量赋值:
struct Person {
string name;
int age;
};
Person person;
= "Tom";
person.age = 20;
3. 定义结构体变量指针,通过动态内存分配来创建结构体变量:
struct Person {
string name;
int age;
};
Person *p = new Person; p->name = "T om";
p->age = 20;。

c语言结构体变量的初始化和引用

c语言结构体变量的初始化和引用

c语言结构体变量的初始化和引用在C语言中,结构体是一种非常常见的数据类型,它是由不同类型的变量组成的数据集合,可以用于存储和操作多个相关数据。

对于结构体变量的初始化和引用,以下是详细的步骤说明。

一、结构体定义在使用结构体变量之前,需要先定义它的结构体类型。

定义的格式为:struct structName {dataType memberName1;dataType memberName2;dataType memberName3;...};其中structName是结构体的名称,可以根据需要自行命名。

memberName是结构体成员的名称,dataType是成员的数据类型,可以是int, char, float等基本数据类型,也可以是结构体类型。

例如,定义一个表示学生信息的结构体类型为:struct Student {int id;char name[20];int age;float score;};二、结构体变量的定义与初始化定义一个结构体变量的格式为:struct structName variableName;。

其中,structName是结构体类型的名称,variableName是变量的名称。

结构体变量的初始化可以在定义时进行,也可以在后续的操作中进行。

如果在定义时进行初始化,需要按照以下格式进行:struct structName variableName = {value1, value2,value3, ...};其中,value1, value2, value3是按照结构体定义中成员的顺序依次赋值的。

以Student结构体为例,定义一个结构体变量并初始化的代码如下:struct Student s1 = {11001, "张三", 18, 85.5};三、结构体变量的引用在使用结构体变量时,需要通过成员运算符"."(英文点号)来引用结构体中的成员,格式为variableName.memberName。

C++中结构体的类型定义和初始化以及变量引用

C++中结构体的类型定义和初始化以及变量引用

C++中结构体的类型定义和初始化以及变量引⽤C++结构体类型的定义和初始化有时需要将不同类型的数据组合成⼀个有机的整体,以供⽤户⽅便地使⽤。

这些组合在⼀个整体中的数据是互相联系的。

例如,⼀个学⽣的学号、姓名、性别、年龄、成绩、家庭地址等项,都是这个学⽣的属性,见图可以看到学号(num)、姓名(name)、性别(sex)、年龄(age)、成绩(score )、地址(addr)是与姓名为“Li Fun”的学⽣有关的。

如果在程序中将num,name,sex,age,score,addr分别定义为互相独⽴的变量,就难以反映出它们之间的内在联系。

应当把它们组织成⼀个组合项,在⼀个组合项中包含若⼲个类型不同(当然也可以相同)的数据项。

C和C++允许⽤户⾃⼰指定这样⼀种数据类型,它称为结构体。

它相当于其他⾼级语⾔中的记录(record)。

例如,可以通过下⾯的声明来建⽴如图所⽰的数据类型。

struct Student//声明⼀个结构体类型Student{int num; //包括⼀个整型变量numchar name[20]; //包括⼀个字符数组name,可以容纳20个字符char sex; //包括⼀个字符变量sexint age; //包括⼀个整型变量agefloat score; //包括⼀个单精度型变量char addr[30]; //包括⼀个字符数组addr,可以容纳30个字符}; //最后有⼀个分号这样,程序设计者就声明了⼀个新的结构体类型Student(struct是声明结构体类型时所必须使⽤的关键字,不能省略),它向编译系统声明:这是⼀种结构体类型,它包括num, name, sex, age, score, addr等不同类型的数据项。

应当说明Student是⼀个类型名,它和系统提供的标准类型(如int、char、float、double ⼀样,都可以⽤来定义变量,只不过结构体类型需要事先由⽤户⾃⼰声明⽽已。

结构体的三种定义方式

结构体的三种定义方式

结构体的三种定义方式结构体是C语言中的一种自定义数据类型,它能够将不同类型的变量组合成一个整体,方便数据的管理和使用。

在C语言中,结构体有三种定义方式,分别是:1. 直接定义结构体变量这种方式比较简单,直接定义结构体变量,然后初始化各个成员变量,例如:```struct student {char name[20];int age;float score;} stu1 = {'Tom', 18, 89.5};```这样就定义了一个名为student的结构体,其中包含了三个成员变量,分别是字符串类型的name、整型的age和浮点型的score。

同时,定义了一个名为stu1的结构体变量,并初始化了它的三个成员变量。

2. 使用typedef定义结构体类型这种方式使用typedef关键字定义一个结构体类型,可以方便地重命名结构体类型。

例如:```typedef struct {char name[20];int age;float score;} Student;```这样就定义了一个名为Student的结构体类型,其中包含了三个成员变量,分别是字符串类型的name、整型的age和浮点型的score。

使用时,只需要定义一个Student类型的变量即可。

3. 定义结构体指针这种方式使用结构体指针来访问结构体中的成员变量。

例如: ```struct student {char name[20];int age;float score;};struct student *pstu = NULL;```这样就定义了一个名为student的结构体,其中包含了三个成员变量,分别是字符串类型的name、整型的age和浮点型的score。

同时,定义了一个名为pstu的结构体指针,指向一个student类型的结构体。

以上就是C语言中结构体的三种定义方式,可以根据实际需求选择不同的方式来定义结构体类型。

c语言结构体变量初始化

c语言结构体变量初始化

c语言结构体变量初始化C语言中,结构体是一种自定义数据类型,由多个不同类型的数据成员组成。

在使用结构体变量之前,我们需要对其进行初始化,以确保结构体变量的每个成员都具有合适的初始值。

本文将介绍如何对C语言结构体变量进行初始化。

一、结构体变量初始化基本语法对于定义好的结构体类型,我们可以使用以下方式对其变量进行初始化:struct 结构体类型结构体变量名 = {成员1初始值, 成员2初始值, ...};其中,成员1、成员2等表示结构体类型中的成员变量名,初始值为该成员变量的初始值。

注意,成员变量的初始值要与定义时的数据类型相匹配。

例如,如果我们定义了如下结构体类型:struct Person {char name[20];int age;float height;};则可以使用以下语法对其变量进行初始化:struct Person p1 = {'Tom', 20, 1.75};其中,变量p1的成员变量name、age、height的初始值分别为“Tom”、20、1.75。

二、结构体变量初始化注意事项1.初始化顺序应与结构体定义中成员变量的顺序一致。

即,如果定义了如下结构体类型:struct Student {int id;char name[20];float score;};则对应的初始化语法应为:struct Student s1 = {1001, 'Alice', 89.5};2.如果没有对所有成员变量进行初始化,则未初始化的成员变量将自动赋值为0或NULL。

例如,对于如下结构体类型:struct Book {char title[50];char author[20];int pages;};我们可以使用以下语法对其变量进行初始化:struct Book b1 = {'C语言从入门到精通', '张三', 500};此时,变量b1的成员变量title、author已经被初始化,而成员变量pages将自动赋值为0。

7.1C++结构体类型的定义和初始化

7.1C++结构体类型的定义和初始化

有时需要将不同类型的数据组合成一个有机的整体,以供用户方便地使用。

这些组合在一个整体中的数据是互相联系的。

例如,一个学生的学号、姓名、性别、年龄、成绩、家庭地址等项,都是这个学生的属性,见图7.1。

图7.1可以看到学号(num)、姓名(name)、性别(sex)、年龄(age)、成绩(score )、地址(addr)是与姓名为“Li Fun”的学生有关的。

如果在程序中将num,name,sex,age,score,addr分别定义为互相独立的变量,就难以反映出它们之间的内在联系。

应当把它们组织成一个组合项,在一个组合项中包含若干个类型不同(当然也可以相同)的数据项。

C和C++允许用户自己指定这样一种数据类型,它称为结构体。

它相当于其他高级语言中的记录(record)。

例如,可以通过下面的声明来建立如图7.1所示的数据类型。

.struct Student//声明一个结构体类型Student.{.int num; //包括一个整型变量num.char name[20]; //包括一个字符数组name,可以容纳20个字符.char sex; //包括一个字符变量sex.int age; //包括一个整型变量age.float score; //包括一个单精度型变量.char addr[30]; //包括一个字符数组addr,可以容纳30个字符.}; //最后有一个分号这样,程序设计者就声明了一个新的结构体类型Student(struct是声明结构体类型时所必须使用的关键字,不能省略),它向编译系统声明:这是一种结构体类型,它包括num,name,sex,age,score,addr等不同类型的数据项。

应当说明Student是一个类型名,它和系统提供的标准类型(如int、char、float、double一样,都可以用来定义变量,只不过结构体类型需要事先由用户自己声明而已。

声明一个结构体类型的一般形式为:struct 结构体类型名 {成员表列};结构体类型名用来作结构体类型的标志。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

结构体变量初始
————————————————————————————————作者:————————————————————————————————日期:
9.1.6 结构体变量的初始化
和C语言中其它变量一样,在定义结构体变量时可以进行初始化操作,一般形式为([]中的内容表示可省略):
struct [结构体类型名]
{
数据类型名1 成员名1;
……
数据类型名n 成员名n;
}结构体变量 = {初始数据};
例如,可以在定义hero型变量wusong时对其进行初始化:
struct hero
{
int number; //排名
char sex; //性别
char star_name[20]; //星名
char name[20]; //名称
char nickname[20]; //绰号
char position[20]; //职业
char weapon[20]; //使用武器
} wusong={14,’m’,”天伤星”,”武松”,”行者”,”步兵头领”,”2把戒刀”};
//定义了结构体变量wusong并初始化。

定义结构体变量wusong但没有初始化时,编译器会给每个成员一个默认值,初始化后就赋予初始化时地赋值,如图9.4所示:
图9.4 结构体变量及其初始化
注意:对结构体变量进行初始化时,必须按照每个成员的顺序和类型一一对应地赋值,少赋值、多赋值,以及类型不符都可能引起编程错误。

9.1.6 结构体变量的引用
在定义了结构体变量后,就可以引用这个变量。

所谓引用结构体变量就是使用结构体变量或结构体变量的成员进行运算或者其他操作。

1. “.”运算符
在C语言中,“.”也是一个运算符,叫做成员运算符。

一般和结构体或共用体变量名称一起使用,用来指定结构体或共用体变量的成员。

例如:
linchong.nickname;
用来指定结构体变量linchong的成员nickname。

2. 结构体变量成员的引用
C语言允许引用结构体变量的成员完成某种操作。

其一般形式为:
结构体变量名.成员名
例如,对于上面定义的结构体变量wusong,可这样引用其成员:wusong.number,wusong.sex; //应用结构体变量
wusong.number+1; //对结构体进行运算
printf(“%d\n”, wusong.number); //输出构体成员的值也可对定义了的结构体变量的成员赋值:
sunerniang.number=103;
sunerniang.nickname=”母夜叉”;
3. 整个结构体变量的引用
C语言允许对两个相同类型的结构体变量之间进行整体赋值。

例如,下面将wusong的值赋给与其类型相同的变量zhangsan:
zhangsan=wusong;
9.1.7 引用结构体变量注意事项
在引用结构体变量时,需注意以下几点:
l 必须先定义结构体变量,才能对其进行引用。

当开发大型程序时,引用未定义的结构体变量而引起的错误可能会时常出现,不过,幸运的是,编译器会发现此错误,程序将无法编译通过。

但是,养成良好的编程习惯还是必须的,毕竟调试错误也是一件很麻烦的事情。

l 如果一个结构体变量的成员又是一个结构类型,引用时要用成员运算符逐级遍历到最低层的成员。

例如,下面对前面定义的hero类型变量wusong的成员death_day 的结构体成员进行引用:
wusong.death_day.month
wusong.death_day.day
wusong.death_day.year
其中,wusong为第一级的结构体变量名,death_day既为wusong的成员,又为第二级结构体变量名,month,day,year为death_day的成员。

l 结构体变量成员可以像普通变量一样参与各种运算或其他操作。

例如:
songerniang.sex=’w’; //对结构体变量成员进行赋值操作
songerniang.number++; //对结构体变量成员进行自增运算
sunerniang.number>wusong.number; //比较两个结构体变量成员l 可以引用结构体变量地址,也可以引用结构体变量成员的地址。

例如,下面都是合法的语句:
//以十六进制数的形式输出结构体变量wusong的地址
printf(“%x”,&wusong);
//以十六进制数的形式输出结构体变量wusong成员number的地址printf(“%x”,&wusong.number);
//从键盘输入字符给sunerniang变量的成员sex赋值
scanf(“%c”,&sunerniang.sex);
l 不能对结构体变量整体进行诸如输入输出的操作。

例如,下面的语句是非法的:
scantf(“%d%c%s%s%s%s%s”,&sunerniang);
l 结构体成员名可以与程序中的变量名相同,但两者是完全不同的两个变量。

例如,下面的程序清单说明了局部变量和结构体中的成员变量可以同名,但不代表同一个变量:
//声明结构体类型
struct hero
{
int number; //排名
char sex; //性别
char star_name[20]; //星名
char name[20]; //名称
char nickname[20]; //绰号
char position[20]; //职业
char weapon[20]; //使用武器
};
void main()
{
int number=100; //局部变量
struct hero sunerniang;
sunerniang.number=103; //结构体成员
}
此程序中两个同名的变量如图9.5所示:
图9.5 同名的不同变量。

相关文档
最新文档