结构体
主要内容:
- 结构体类型声明
- 结构体初始化
- 结构体成员访问
- 结构体传参
结构的基础知识
结构是一些值得结合,这些值称为成员变量,结构得每个成员可以是不同类型得变量。
#include<stdio.h>
struct Stu
{
//成员变量
//成员列表
char name[20];
short age;
char sex[5];
float score;
}s1,s2,s3; //学生s1,s2,s3 //创建了三个学生出来
int main()
{
struct Stu s;
return 0;
}
#include<stdio.h>
struct Stu
{
//成员变量
//成员列表
char name[20];
short age;
char sex[5];
float score;
};
int main()
{
struct Stu s;
return 0;
}
#include<stdio.h>
typedef struct Stu
{
char name[20];
short age;
char sex[5];
float score;
}Stu; //Stu==struct Stu 此处得Stu为类型名,不是变量名
int main()
{
return 0;
}
结构成员的类型
结构成员可以是标量,数组,指针,甚至是其他结构体
#include<stdio.h>
struct Point
{
int x;
int y;
//注意结构体中不能包含自己这一结构体,但是可以包含别的结构体
//包含自己这个结构体,在算结构体大小的时候就不好算了
};
struct Test
{
int a;
char arr[10];
int* p;
struct Point;
};
int main()
{
return 0;
}
结构体变量的定义和初始化
#include<stdio.h>
struct Point
{
int x;
int y;
}p1; //声明类型的同时定义p1
int main()
{
struct Point p2; //定义结构体变量p2
return 0;
}
//通常采用p2的方式
#include<stdio.h>
struct Point
{
int x;
int y;
};
struct T
{
char arr[10];
int age;
struct Point p;
int arr2[5];
};
int main()
{
struct Point p = { 1,2 };
struct T t = { "hehe",20,{2,4},{1,2,3,4} };
printf("%s %d %d %d %d %d\n", t.arr, t.age, t.p.x, t.p.y,t.arr2[0],t.arr2[1]);
return 0;
}
结构体成员访问
- 结构体变量访问成员结构变量成员是通过.操作符来访问的,点操作符接受两个操作数
struct Stu
{
char name[20];
int age;
};
//如果只有这些代码的话,他是没有向内存中申请空间的。
struct Stu s = { "zhangsan",20 };
//有了上面的创建s对象的那句语句,才算向内存中申请了一定的空间。
//想找到name的话,就用s.name,想找到age的话,就用s.age
- 结构体指针访问指向变量的成员,有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针(也成为结构体指针)
#include<stdio.h>
struct Stu
{
char name[20];
int age;
};
void Print(struct Stu* s) //结构体指针
{
printf("%s %d", s->name, s->age);
}
int main()
{
struct Stu s = {"张三",20 };
Print(&s);
return 0;
}
结构体传参
在结构体传参的时候,有时候可以传变量,有时候可以传地址
#include<stdio.h>
struct Stu
{
char name[20];
int age;
};
void Print(struct Stu s) //结构体指针
{
printf("%s %d", s.name, s.age);
}
int main()
{
struct Stu s = { "张三",20 };
Print(s);
return 0;
}