结构体基础
知识联系
内置类型(基本数据类型):整型 浮点 字符 布尔
数组类型:int arr[] = {1,2,3,};
指针类型:int* p = arr;
自定义类型:结构体类型
结构体设计
struct Student{
属性(成员变量)
char name[100];
int age;
char sex[4];
int id;
double socre;
};
结构体设计比较
//一个结构体变量总字节数为120Byte
struct Student
{
char name[100];
int age;
char sex[4];
int id;
double score;
};
//一个结构体变量总字节数为24Byte
struct Student
{
const char* name;
int age;
char sex[4];
int id;
double score;
};
结构体使用
结构体变量,通过 . 访问内部成员
//定义结构体变量,并且访问内部成员
struct Student stu = { "zs",10,"男",1,95.5 };// .c .cpp 文件都可以
Student stu = { "zs",10,"男",1,95.5 };// .cpp文件可以 .c 文件不可以
printf("%s %d\n", stu .name,stu .age);
结构体指针
struct Student* p = &stu ;
结构体指针变量p进行成员访问 -> 指向符
(*p).name <=> p->name //两者是等价的
注意:运算符 . 的优先级高于 *,所以加( )
测试结果
#include<stdio.h>
struct Student
{
char name[100];
int age;
char sex[4];
int id;
double score;
};
int main() {
struct Student stu = { "zs",10,"男",1,95.5 };
Student ls = { "zs",10,"男",1,95.5 };
printf("%s %d\n", stu.name, stu.age);
struct Student* p = &stu;
printf("%s %d", p->name,(*p).age);
return 0;
}
错误案例
(*p).name = "lisi"//error!!!
//修改
strcpy((*p).name,"lisi");
//大多数写法
strcpy(p->name,"lisi");
typedef 在结构体中的用法
struct Bankcard
{
int id;
int passwd;
int money;
};
typedef struct Bankcard Bankcard;
typedef struct Bankcard* PCard;
//上面的定义可以这样简化
struct Bankcard
{
int id;
int passwd;
int money;
}Bankcard,*PCard;
int main() {
Bankcard card = { 1,1,1 };
PCard pointer = &card;
return 0;
}
在.c文件中可以这样设计
typedef struct Bankcard
{
int id;
int passwd;
int money;
}Bankcard,*PCard;//同时重新定义结构体和结构体指针
int main() {
Bankcard card = { 1,1,1 };
PCard pointer = &card;
return 0;
}
结构体嵌套
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string>
typedef struct Address {
const char* province;
const char* city;
}Adddress;
typedef struct Student {
const char* name;
int age;
int id;
Address address;
}Student;
typedef struct User {
const char* IdCard;
const char* name;
Adddress address;
};
typedef struct BankCard {
int id;
int passwd;
int money;
const char* BankName;
User user;
};
int main() {
Student stu ={"zs",10,1,{"陕西省","西安市"}};
printf("%s\n", stu.address.province);
BankCard bankcard = { 1,1,1,"建行",{"2332","张三",{"陕西省","西安市"}} };
printf("%s\n", bankcard.user.IdCard);
return 0;
}
结构体数组
typedef struct Student {
const char* name;
int age;
int id;
}Student;
main(){
Student arr[]={{"张三",20.001},{"李四",21.002}};//定义结构体数组并初始化
arr[1].id=003;//访问结构体的元素
}