结构体 (C语言)

文章目录

  • 1 结构体 struct
    • 1. 1 什么是结构体
    • 1. 2 例子
    • 1. 3 结构成员的类型
    • 1. 4 结构体变量的定义和初始化
  • 2 结构体成员的访问
  • 3 结构体传参


1 结构体 struct

1. 1 什么是结构体

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

1. 2 例子

  • 比如学生结构体
struct Stu
{
	char name[20];
	int age;
	char gender[5];
	int hight;
}s1,s2,s3;

注意}s1,s2,s3;最后有分号.

  • main外部定义全局变量结构体
struct Stu s5; 
  • main内部定义局部变量结构体
int main()
{
	struct Stu s4;

	return 0;
}

1. 3 结构成员的类型

结构的成员可以是标量、数组、指针,甚至是其他结构体

1. 4 结构体变量的定义和初始化

  • 定义
struct Point
{
	int x;
	int y;
};


struct Stu
{
	char name[20];//名字
	int age;//年龄
	char sex[5];//性别
	int hight;//身高
};

struct S
{
	char c;
	struct Point p;
	double d;
	char str[20];
};
  • 初始化并打印
	//struct S ss = { 'x', {100, 200}, 3.14, "hello"};
	struct S ss = {.d=3.14, .c = 'x', .p.x =100};
	printf("%c %d %d %lf %s\n", ss.c, ss.p.x, ss.p.y, ss.d, ss.str);

	struct Point p = {10, 20};
	struct Stu s = {"zhangsan", 20, "男", 180};
	printf("x=%d y=%d\n", p.x, p.y);
	printf("%s %d %s %d\n", s.name, s.age, s.sex, s.hight);

x 100 0 3.140000
x=10 y=20
zhangsan 20180

2 结构体成员的访问

结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数

struct S
{
	char name[20];
	int age;
};

int main()
{
	struct S s = {.age=20, .name = "Z"};
	printf("%s %d\n", s.name, s.age);
	s.age = 21;
	//*char*
	//s.name = "zhangsanfeng";//err
	strcpy(s.name, "QQ");
	printf("%s %d\n", s.name, s.age);

	return 0;
}

Z 20
QQ 21

注意使用了strcpy(s.name, "QQJ");.

3 结构体传参

传值调用 和 传地址调用
函数传参的时候,参数是需要压栈的。
如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能下降

  • 结构体传参的时候,要传结构体的地址。
struct S
{
	int data[1000];
	char buf[100];
};

//结构体变量.结构体成员名
//结构体指针->结构体成员名

void print1(struct S ss)
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d ", ss.data[i]);
	}
	printf("%s\n", ss.buf);
}

void print2(struct S* ps)
{
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d ", ps->data[i]);
	}
	printf("%s\n", ps->buf);
}

int main()
{
	struct S s = { {1,2,3} , "hello world"};
	print1(s);//传值调用
	print2(&s);//传址调用
	return 0;
}

1 2 3 0 0 0 0 0 0 0 hello world
1 2 3 0 0 0 0 0 0 0 hello world

你可能感兴趣的:(C初阶,c语言)