结构体定义:结构体里面能定义除自己本身之外的任何数据类型,虽然不能定义自己本身,但能定义自身类型的指针变量。如:
struct node
{
node n; // error 结构体内不能定义自己本身
node *next; // 可以定义自身类型的指针变量
}
访问结构体内元素:
struct node
{
int x;
int info[20];
node *next;
}n1, *n2;
//普通变量访问结构体元素方法('.')
n1.x;
n1.info;
n1.next;
//指针变量访问结构体元素方法('.'或'->')
(*n2).x;
(*n2).info;
(*n2).next;
n2->x;
n2->info;
n2->next;
结构体初始化:
// C语言语法,逐个元素初始化,易理解,缺点是结构体内变量多时赋值麻烦
scanf("%d, %s", &n1.x, n1.info);
#include"stdio.h"
//C++语法,利用构造函数赋初值
struct studentInfo
{
int id;
char gender;
//不初始化就能定义结构体变量
studentInfo(){}
//初始化id和gender
studentInfo(int _id, char _gender)
{
id = _id;
gender = _gender;
}
//构造函数的另一种形式(作用与上一构造函数相同)
//studentInfo(int _id, char _gender): id(_id), gender(_gender){}
}stu[10];
int main()
{
studentInfo stu1; //若没有构造函数 studentInfo(){} 则此处会报错
stu1.id=100;
stu1.gender='F';
for(int i=0;i<10;i++)
{
stu[i] = studentInfo(i, 'M'); //利用构造函数 studentInfo(int _id, char _gender){} 初始化
}
for(int i=0;i<10;i++)
{
printf("student_%d: id:%d, gender:%c\n", i, stu[i].id, stu[i].gender);
}
printf("student_100: id:%d, gender:%c\n", stu1.id, stu1.gender);
return 0;
}
小结:对结构体变量进行初始化时,一般采用C++的语法,利用构造函数对结构体进行初始化,这会使赋值变得更为简洁,方便。构造函数不需要写返回类型,且函数名与结构体相同,构造函数可以有多个,在使用构造函数时,要保证构造函数里的参数与定义的构造函数参数个数对等,否则可能出现错误。