结构体可以把不同的类型糅合成一种新的数据类型。
结构体创建和初始化
1、创建结构体类型要放在函数外面
2、创建结构体类型的时候可以同时创建结构体变量
3、访问结构体变量中的元素使用点(.),结构体指针访问成员使用->
4、结构体变量之间可以直接赋值
#include<iostream>
#include<windows.h>
#include<cstring>
using namespace std;
// 1、创建结构体Student类型,创建的结构体类型要放在函数体外
struct Student {
int age;
char name[20];
}s1; // 创建结构体的时候可以同时创建变量,不推荐这种
int main() {
struct Student s2 = {12, "abc"}; // 2、创建变量的时候初始化
struct Student s3;
s3 = s2; // 结构体变量之间可以直接赋值,等同于memcpy拷贝函数操作
s1.age = 13;
// s1.name = "bian"; 数组首地址无法修改,"bian"返回首地址
strcpy_s(s1.name, sizeof("bian"), "bian"); //字符串拷贝函数推荐用strcpy_s,strcpy在vs中会报错不安全,char* strcpy( char* dest, const char* src );
cout << s2.name << " " << s2.age << endl;
cout << s3.name << " " << s3.age << endl;
cout << s1.name << " " << s1.age << endl;
system("pause");
return 0;
}
结果:
abc 12
abc 12
bian 13
请按任意键继续. . .
结构体数组
#include <iostream>
#include <windows.h>
using namespace std;
struct Student {
int age;
char name[20];
};
int main() {
// struct Student s[3]; // 创建结构体数组
struct Student s[3] = { {12, "bia"}, {13, "wa1"} }; //创建结构体数组的时候初始化
// 2、创建以后还以修改
s[0].age = 12;
strcpy_s(s[0].name, 20, "wang");
cout << s[0].name << " " << s[0].age << endl;
system("pause");
return 0;
}
结果:
wang 12
请按任意键继续. . .
结构体指针
程序:
#include<iostream>
#include<windows.h>
using namespace std;
struct Student {
int age;
char name[20];
};
int main() {
struct Student s1;
s1.age = 12;
strcpy_s(s1.name, 20, "bian"); // 创建的时候不初始化可以使用该函数快速赋值
struct Student* p = NULL;
p = &s1;
cout << p->age << " " << p->name << endl; // 指针通过->直接访问结构体数据
cout << (*p).age << " " << (*p).name << endl; // 指针通过解引后访问数据
system("pause");
return 0;
}
结果:
12 bian
12 bian
请按任意键继续. . .
结构体作为函数参数
结构体体作为函数参数和普通变量作为函数参数用法一样