目录 : 1.结构体类型的声明.
2.结构体变量的定义和初始化.
3.结构体传参.
前言 : 结构是一些值的集合,这些值被称为成员变量.
结构的每个成员可以是不同类型的变量. ----成员变量可以是标量,数组,指针和其他结构体.
1.结构体类型的声明 : struct tag(自定义) 或者通过 typedef struct stu
{ {
成员 成员
}; }stu;
两个相同之处在于都是结构体定义;
第二种则将struct stu重命名为stu.
2.结构体变量的定义和初始化 : 对结构体变量初始化通过 "{ }" --大括号!!!.
eg :
#include<stdio.h>
struct Point
{
int x;
int y;
}s1,s2,s3; //此时s1,s2,s3是全局变量,但是下面的p1,p2都是局部变量.
typedef struct Point
{
int a;
int b;
}point; //point为struct Point 重命名
int main()
{
struct Point p1={2,3}; //结构体变量定义和初始化.
point p2={4,5}; //通过typedef来将struct Point修改成point.
}
//两个性质相同,只是写法不同,写代码时选取一种即可. 但是不排除成员变量为结构体!!!
结构体变量输出,通过对结构体成员的访问.
3.结构体传参 : 和函数传参相似
(1).传值 : 通过 " . "对成员变量的访问
(2).传址 : 通过 " -> "对成员变量访问.
注意:我们一般运用第二种,因为传值是形参对实参的临时拷贝,传址则会节约空间和时间.
#include<stdio.h>
struct S
{
float score;
char tele[12];
int age;
};
struct T
{
char name[20];
char sex[6];
struct S s; //结构体中的成员变量可以是结构体
};
void Print1(struct T tmp) //传值通过 " . " 逗号来访问成员变量
{
printf("%s\n", tmp.name);
printf("%s\n", tmp.sex);
printf("%lf\n", tmp.s.score);
printf("%s\n", tmp.s.tele);
printf("%d\n", tmp.s.age);
}
void Print2(struct T* tp) //传址 通过 " -> "箭头来访问
{
printf("%s\n", tp->name);
printf("%s\n", tp->sex);
printf("%lf\n", tp->s.score);
printf("%s\n", tp->s.tele);
printf("%d\n", tp->s.age);
}
int main()
{
struct T t = { "张三三","男",{99,"15982722354",18} };
Print1(t); //结构体传参,通过 传值
Print2(&t); //传址
return 0;
}