初始结构体
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 语言结构体 ( 结构体类型变量初始化 | 定义变量时进行初始化 | 定义隐式结构体时声明变量并初始化 | 定义普通结构体时声明变量并初始化 )