结构体

结构体
主要内容:
  • 结构体类型声明
  • 结构体初始化
  • 结构体成员访问
  • 结构体传参
结构的基础知识

结构是一些值得结合,这些值称为成员变量,结构得每个成员可以是不同类型得变量。

#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;
}
但是相比之下,传指针是好一些,传值调用的话,形参只是实参的一份临时拷贝,对形参的改变无法影响实参,对于结构体来说,如果是值传递的话,就相当于是要把整个结构体都传过去,所占的空间相对来说是比较大的。所以就是用了两份空间。如果是传地址的话,用指针接收,就只耗费了四个字节。对于空间和时间来说,都是比较节省的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值