结构体变量初始
- 格式:doc
- 大小:404.50 KB
- 文档页数:8
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}一直以为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种形式。
数组与结构体的区别:
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语言中,结构体是一种非常常见的数据类型,它是由不同类型的变量组成的数据集合,可以用于存储和操作多个相关数据。
对于结构体变量的初始化和引用,以下是详细的步骤说明。
一、结构体定义在使用结构体变量之前,需要先定义它的结构体类型。
定义的格式为: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++结构体类型的定义和初始化有时需要将不同类型的数据组合成⼀个有机的整体,以供⽤户⽅便地使⽤。
这些组合在⼀个整体中的数据是互相联系的。
例如,⼀个学⽣的学号、姓名、性别、年龄、成绩、家庭地址等项,都是这个学⽣的属性,见图可以看到学号(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语言结构体变量进行初始化。
一、结构体变量初始化基本语法对于定义好的结构体类型,我们可以使用以下方式对其变量进行初始化: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.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 结构体类型名 {成员表列};结构体类型名用来作结构体类型的标志。
c语言结构体的计算C语言中的结构体是用户自定义的数据类型,可以将不同类型的数据组合到一个结构体中,以便更方便地管理和操作这些数据。
结构体的计算主要包括结构体的定义、结构体变量的声明与初始化、结构体成员的访问等。
下面将详细介绍这些内容。
一、结构体的定义C语言中使用`struct`关键字来定义结构体,其一般形式如下:```struct 结构体名称数据类型1成员1;数据类型2成员2;//...数据类型n成员n;};```其中,结构体名称是用户自定义的标识符,用来标识一个结构体,成员1至成员n是结构体的成员,可以是任意合法的C语言数据类型。
例如,定义一个表示学生信息的结构体:```cstruct Studentchar name[20];int age;float score;};```这个结构体包含了三个成员,分别是姓名、年龄和分数。
其中,姓名是一个字符数组,最大长度为20;年龄是一个整型变量;分数是一个浮点型变量。
二、结构体变量的声明与初始化结构体变量是由结构体类型创建的实例,可以通过声明变量的方式来创建结构体变量。
一般形式如下:```struct 结构体名称变量名称;```例如,声明一个名为`stu`的`Student`结构体变量:```cstruct Student stu;```在声明结构体变量时,还可以通过使用"初始化列表"的方式对结构体成员进行初始化。
初始化列表使用`{}`括起来,成员之间用逗号分隔,对应成员的初始化表达式在`{}`中的位置。
例如,为上面定义的`Student`结构体变量`stu`进行初始化:```cstruct Student stu = {"Tom", 18, 90.5};```这样,`stu`的成员`name`被初始化为`"Tom"`,`age`被初始化为`18`,`score`被初始化为`90.5`。
三、结构体成员的访问C语言中,可以使用点`.`运算符来访问结构体变量的成员。
struct 构造函数
struct是C语言中的一种数据结构,它是一种复合的数据类型,可以把一些相关的变量放在一个结构体中,方便我们管理和操作。
构造函数是一种特殊的函数,它主要做的工作是初始化结构体变量,它会把结构体变量中的每个成员变量赋值成特定的值,然后返回改变量的地址。
构造函数定义为函数名,其中包括结构体变量名称和对应变量的初始值,格式如下所示:
struct 构造函数名(struct 结构体变量名结构体变量v, 初始值1,… 初始值n)。
{。
结构体变量v.变量1=初始值1;。
结构体变量v.变量2=初始值2;。
…。
结构体变量v.变量n=初始值n;。
return 结构体变量v; 。
}。
使用构造函数可以有效的避免对每个结构体变量的一一赋值,代码变得更简洁,便于管理和维护。
此外,结构体变量的初始值可以通过函数参数传递,使得程序更加灵活。
总之,构造函数在程序中可以把与复合变量有关的数据初始化,使得程序更加简洁、高效。
结构体数组初始化的三种方法在C语言中,结构体是一种用户自定义的数据类型,它可以包含多个不同类型的变量。
当我们需要创建一个包含多个结构体元素的数组时,我们需要了解结构体数组的初始化方法。
在这篇文章中,我们将介绍结构体数组初始化的三种常见方法。
方法一:逐个初始化结构体数组元素这是最简单直接的方法,我们逐个为每个结构体元素设置成员变量的值。
示例如下:```#include <stdio.h>struct Person {char name[50];int age;};int main() {struct Person people[3];strcpy(people[0].name, "Alice");people[0].age = 25;strcpy(people[1].name, "Bob");people[1].age = 30;strcpy(people[2].name, "Charlie");people[2].age = 35;return 0;}```方法二:使用初始化列表初始化结构体数组元素C语言中支持使用初始化列表对结构体数组进行初始化。
我们可以在定义数组时使用大括号,为每个结构体元素设置成员变量的值。
示例如下:```#include <stdio.h>struct Person {char name[50];int age;};int main() {struct Person people[3] = {{"Alice", 25},{"Bob", 30},{"Charlie", 35}};return 0;}```方法三:使用for循环初始化结构体数组元素如果结构体数组规模较大或者需要动态生成数组元素的初始值,我们可以使用for循环进行初始化。
一、结构体的说明及变量的定义1.结构体类型的说明由于结构体类型不是C语言提供的标准类型,为了能够使用结构体类型,必须先说明结构体类型,描述构成结构体类型的数据项(也称成员),以及各成员的类型。
其说明形式为:struct结构体名{数据类型成员1;数据类型成员n;};其中,struct是关键字,后面是结构体类型名,两者一起构成了结构体数据类型的标识符。
结构体的所有成员都必须放在一对大括号之中,每个成员的形式为:数据类型成员名;同一结构体中不同的成员不能使用相同的名字,但不同结构体类型中的成员名可以相同。
大括号后面的分号‚;‛不能省略。
如:struct person{char name[10];char sex;int age;int stature;};这里定义了一个结构体类型 person,该类型由4个成员构成。
注意:结构体类型说明中,只是描述该结构体类型的成员,说明了一种数据类型,并不分配空间。
要使用说明的结构体类型,必须定义相应的变量,才会分配空间。
2.结构体变量的定义结构体变量的定义有以下几种形式:?结构体类型的说明与定义分开。
例如说明了struct person之后,可以定义相应的变量:struct person p1, p2;定义了两个struct person变量,每个变量按结构类型中的成员分配相应的空间,每一个结构体变量所分配空间为所有成员占用空间之和。
如p1、p2所占用空间都为15byte。
?说明结构体类型的同时定义相应变量。
如:struct teacher{int number;char name[10];char sex;char profession[6];}t1, t2;在说明struct teacher类型的同时,定义了相应的两个变量t1、t2。
?直接定义结构体变量,没有结构体类型名。
如:struct{int No;char name[10];char sex;int age;}s1, s2;定义两个结构体变量s1、s2,他们都有4个成员,每个变量都占用15byte,但与第2种方式不同,没有给出结构体名,因而无法在其他地方再次使用该结构体类型定义别的变量。
结构体参数初始化列表在 C++ 中,结构体是一种重要的数据结构,它可以将多个不同类型的数据组合在一起,形成一个整体。
当我们定义一个结构体时,需要为结构体中的每个成员变量分配内存,并指定它们的类型和名称。
在初始化结构体时,我们可以使用参数初始化列表来为结构体的成员变量赋值。
参数初始化列表是一种 C++11 引入的新特性,它允许我们在定义结构体对象时,使用花括号语法为结构体的成员变量赋值。
初始化列表的语法如下:```struct 结构体名 {成员变量名 1 = 值 1;成员变量名 2 = 值 2;.....};```在参数初始化列表中,每个成员变量的值都必须指定,否则编译器会报错。
参数初始化列表中可以使用常量表达式来初始化成员变量,也可以使用字面量来初始化数组成员。
下面是一个使用参数初始化列表定义并初始化结构体的例子:```struct Person {int age;string name;};int main() {Person p1 {18, "Tom"};Person p2 {20, "Jerry"};cout << p1.age << " " << << endl;cout << p2.age << " " << << endl;return 0;}```在这个例子中,我们定义了一个名为 Person 的结构体,其中包含一个整型变量 age 和一个字符串类型变量 name。
在主函数中,我们使用参数初始化列表为两个 Person 类型的对象 p1 和 p2 分别初始化了 age 和 name 成员变量。
最后,我们输出了 p1 和 p2 的age 和 name 成员变量的值。
使用参数初始化列表来初始化结构体对象时,编译器会按照列表中的顺序依次初始化每个成员变量。
c语言结构体初始化的三种方法C语言中,结构体是一种自定义的数据类型,用于存储多个不同类型的数据。
在使用结构体之前,我们需要先对其进行初始化,即给结构体的成员变量赋初值。
下面将介绍结构体初始化的三种常见方法。
一、直接初始化法直接初始化法是最简单直接的初始化方式,通过在定义结构体变量时直接给成员变量赋值。
具体语法如下:struct 结构体类型变量名 = {成员1的值, 成员2的值, ...};例如,定义一个学生结构体,并对其进行直接初始化:```c#include <stdio.h>struct Student {char name[20];int age;float score;};int main() {struct Student stu = {"Tom", 18, 98.5};printf("姓名:%s\n", );printf("年龄:%d\n", stu.age);printf("分数:%f\n", stu.score);return 0;}```运行结果:姓名:Tom年龄:18分数:98.500000二、成员初始化法成员初始化法是通过点操作符(.)对结构体的成员变量逐个进行初始化。
具体语法如下:结构体变量.成员1 = 值1;结构体变量.成员2 = 值2;...例如,对上述的学生结构体进行成员初始化:```c#include <stdio.h>struct Student {char name[20];int age;float score;};int main() {struct Student stu; = "Tom";stu.age = 18;stu.score = 98.5;printf("姓名:%s\n", );printf("年龄:%d\n", stu.age);printf("分数:%f\n", stu.score);return 0;}```运行结果:编译错误:assignment to expression with array type从上述代码可以看出,结构体的成员变量name是一个字符数组,不能直接通过赋值来进行初始化。
C语言中结构体(struct)的几种初始化方法在C语言中,结构体是一种自定义的数据类型,用于存储不同类型的数据。
当定义一个结构体变量时,需要进行初始化。
结构体的初始化方法有几种,包括基本初始化、指定成员初始化、常量表达式初始化、顺序初始化和默认初始化。
1.基本初始化基本初始化是最常用的结构体初始化方法,通过使用“{}”括号来初始化结构体变量。
例如```struct Personchar name[20];int age;};struct Person p = {"John", 25};```上述代码中,定义了一个名为Person的结构体,包含一个name数组和一个age整数。
通过基本初始化,将结构体的成员name初始化为"John",age初始化为252.指定成员初始化指定成员初始化可以通过指定成员名来初始化结构体的成员变量。
例如```struct Personchar name[20];int age;};struct Person p = {.name = "John", .age = 25};```上述代码中,通过指定成员名来初始化结构体的成员变量,name成员被初始化为"John",age成员被初始化为253.常量表达式初始化常量表达式初始化可以在结构体定义时用常量表达式对结构体成员进行初始化。
例如```struct Circleint radius;double area;};const double PI = 3.14;struct Circle c = {5, PI * 5 * 5};```上述代码中,定义了一个名为Circle的结构体,包含一个半径radius和一个面积area。
通过常量表达式初始化,将结构体的半径初始化为5,面积初始化为PI * 5 * 54.顺序初始化顺序初始化是将结构体成员按照声明的顺序,由左至右进行初始化。
总结⼏种结构体初始化的⽅法结构体能⾃由组装数据,是⼀种很常见的数据打包⽅法。
当我们定义⼀个结构体后,没有初始化就使⽤,就会使⽤到垃圾数据,⽽且这种错误很难发现。
对于定义的任何变量,我们最好都先初始化。
除了使⽤memset和ZeroMemory之外,有没有更简单的⽅法初始化呢?因为有时候每定义⼀个结构体,就使⽤⼀次memset,也会觉得很繁琐。
我这⾥总结三种⽅法,如果⼤家有什么好的⽅法,不妨加上去。
1、结构体的构造函数中初始化。
2、继承模板类初始化3、定义时初始化在C++中,结构体与类在使⽤上已没有本质上的区别了,所以可以使⽤构造函数来初始化。
如下代码所⽰:struct Stu{int nNum;bool bSex;char szName[20];char szEmail[100];//构造函数初始化Stu(){nNum = 0;bSex = false;memset(szName,0,sizeof(szName));memset(szEmail,0,sizeof(szEmail));}};你可能已经发现了,如果结构体中有⼤量成员,⼀个个赋值,相当⿇烦。
那么你可以这样写:struct Stu{int nNum;bool bSex;char szName[20];char szEmail[100];//构造函数初始化Stu(){memset(this,0,sizeof(Stu));//或者是下⾯的格式//memset(&nNum,0,sizeof(Stu));}};如果在结构体中分配了指针,并且指针指向⼀个堆内存,那么就在析构函数中释放。
以上便是在构造函数中初始化。
2、继承模板类初始化⾸先定义⼀个模板基类:template <typename T>class ZeroStruct{public:ZeroStruct(){memset(this,0,sizeof(T));}};之后定义的结构体都继承于此模板类。
结构体变量初始
————————————————————————————————作者:————————————————————————————————日期:
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 同名的不同变量。