初始结构体

Posted 垚垚是小白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初始结构体相关的知识,希望对你有一定的参考价值。

结构体的声明

# include<stdio.h>
//描述一个学生的方法
//名字
//年龄
//电话
//性别
//struct 结构体关键字  Stu-结构体标签
//struct Stu结构体类型
struct Stu 
{
	//成员变量
	char name[20];
	short age;
	char tele[12];
	char sex[5];
}s1, s2, s3;//定义一个结构体类型,创建结构体变量
//创建不需要内存
//s1,s2,s3为全局变量
int main() {
	struct Stu s;//s为变量,s需要内存,s为局部变量

	return 0;
}
typedef struct Stu
{
	//成员变量
	char name[20];
	short age;
	char tele[12];
	char sex[5];
}Stu;//typedef 将结构体的类型改为Stu
int main() {
	struct Stu s;//s为变量,s需要内存,s为局部变量

	return 0;
}

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

结构体变量的定义和初始化
有了结构体类型,那如何定义变量,其实很简单

# include<stdio.h>
struct S {
	int a;
	char c;
	char arr[20];
	double d;

};
struct T {
	char ch[10];
	struct S s;
	char* pc;
};
int main() {
	char arr[] = "hello bit\\n";
	struct T t = { "hehe",{100,'w',"hello",3.14},arr};
	printf("%s\\n", t.ch);
	printf("%s\\n", t.s.arr);
	printf("%lf\\n", t.s.d);
	return 0;
}

结构体传参

# include<stdio.h>
typedef struct Stu
{
	//成员变量
	char name[20];
	short age;
	char tele[12];
	char sex[5];
}Stu;
void Print1(Stu tmp){
	printf("name: %s\\n", tmp.name);
	printf("age:  %d\\n", tmp.age);
	printf("tele: %s\\n", tmp.tele);
	printf("sex:  %s\\n", tmp. sex);
}
void Print2(Stu* ps) {
	printf("name: %s\\n", ps->name);
	printf("age: %d\\n", ps->age);
	printf("tele: %s\\n", ps->tele);
}
int main() {
	Stu s = { "李四",40,"15555252","男" };
	//打印结构体数据
	Print1(s);
	Print2(&s);
	return 0;
}

面的 print1 和 print2 函数哪个好些?
答案是:首选print2函数。 原因:
函数传参的时候,参数是需要压栈的。 如果传递一个结构体对象的时候,结构体过大,参数压栈
的的系统开销比较大,所以会导致性能的下降。
结论: 结构体传参的时候,要传结构体的地址。

以上是关于初始结构体的主要内容,如果未能解决你的问题,请参考以下文章

浅谈C语言中结构体的初始化

C 语言结构体 ( 结构体类型变量初始化 | 定义变量时进行初始化 | 定义隐式结构体时声明变量并初始化 | 定义普通结构体时声明变量并初始化 )

关于C语言结构体构造函数初始化的问题?

初始化结构体的指定初始化

Linux下C结构体初始化

C 语言结构体 ( 结构体变量之间的赋值 )