初阶C语言结构体【基础的结构体知识】

文章目录

  • 前言
  • 结构体的声明
    • 结构体的声明
      • 结构体的声明示例
  • 结构体的定义和初始化
  • 结构体成员的访问
  • 结构体传参

前言

我们都知道C语言中有很多的数据类型,在使用的时候我们可以根据需要定义不同的数据类型。但是在实际生活中往往会遇到复杂的事物,这时候一个数据类型就不足以描述这个事物,所以就有结构来描述这些复杂的事物。所以结构是一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量。


结构体的声明

结构体的声明

struct tag			//tag 表示结构名
{
 	member-list;    //成员列表
 }
 variable-list; 	//变量列表

其中tag是结构名,struct tag 是类型名,在别处声明一个struct tag类型的变量时,注意不可以将struct省略,member-list是成员列表,可以有多个不同类型的变量,比如,标量(算术类型和指针类型)、数组,甚至可以是其他结构体。

结构体的声明示例

struct Stu
{
 	char name[20];	//名字
	 int age;		//年龄
	 char sex[5];	//性别
	 char id[20];	//学号
}Stu;				//分号不能丢

如果觉得struct Stu这个类型名写得太麻烦,也可以使用typedefine关键字将这个类型名简化一下

struct Stu
{
 	char name[20];	//名字
	 int age;		//年龄
	 char sex[5];	//性别
	 char id[20];	//学号
}Stu;	//这时的Stu表示是类型名
Stu s1;

结构体的定义和初始化

结构体在初始化的时候可以类比一下数组,数组在定义的时候是用大括号 { } 括起来,结构体也是一样的。当结构体里面包含了一个结构体时,需要再使用一个大括号将被包含的数据括起来。

struct Point
{
	 int x;
	 int y;
 }p1; 				//声明类型的同时定义变量p1
struct Point p2; 	//定义结构体变量p2

//初始化:定义变量的同时赋初值。

struct Point p3 = {x, y};
struct Stu        //类型声明
{
	 char name[15];//名字
	 int age;      //年龄
};
struct Stu s = {"zhangsan", 20};//初始化
struct Node
{
	 int data;
	 struct Point p;
	 struct Node* next; 
}n1 = {10, {4,5}, NULL}; //结构体嵌套初始化
struct Node n2 = {20, {5, 6}, NULL};//结构体嵌套初始化

字符串使用 “ ” , 字符使用 ’ ’ 。

结构体成员的访问

访问结构体的时候需要使用到结构体成员访问操作符:

  • 如果是结构体变量,使用 结构体.结构体成员
  • 如果是结构体指针,使用结构体->结构体成员

结构体传参

函数传参的时候,我们都知道,如果将实参传过去的话是要将实参的内容全部拷贝一份,如果是结构体作为函数的参数的话,就会造成很大的空间浪费,所我们在进行结构体的传参的时候需要传结构体的地址,从而通过地址来访问结构体的成员,而不是将整个结构体传过去。

struct S {
 int data[1000];
 int num;
};
struct S s = {{1,2,3,4}, 1000};
//结构体传参
void print1(struct S s) {
 printf("%d\n", s.num);
}
//结构体地址传参
void print2(struct S* ps) {
 printf("%d\n", ps->num);
}
int main()
{
 print1(s);  //传结构体
 print2(&s); //传地址【首选】
 return 0; }

你可能感兴趣的:(C语言,c语言,开发语言,后端)