目录
概念:
与数组类比:
结构体声明:
注意:
结构体变量、全局变量、局部变量:
结构体声明中包含其他结构体变量:
结构体变量的初始化:
包含了其他结构体变量的初始化:
初始化的顺序:
结构体变量的打印:
包含其他结构体变量的打印:
使用指针变量名的打印:
结构体变量的传参:
直接传参:
地址传参:
两种传参的区别:
概念:
结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
或者说结构体是描述一个复杂的对象,比如说人,人有年龄身高体重等等数据,当需要描述一个人时,就需要结构体。
与数组类比:
数组是同一种类型的元素的集合,而结构体也是一种结合,且结构体内部的元素可以是不同类型的数据。
结构体声明:
struct tag
{
member-list;
}variable-list;
- struct是结构体的关键字,不可更改。
- tag是结构体的名字,或者标签,可以更改。
- member-list 结构体的成员列表,表示结构体内部的元素。
- variable-list 结构体的变量成员列表,表示类型是结构体的变量,可以省略。
注意:
声明只是表示结构体的类型,并不占内存的空间,只有结构体变量初始化或者进行改变的时候,才会占用内存空间。
结构体变量、全局变量、局部变量:
比如:
struct Peo
{
char name[20];
char tele[12];
char sex[5];
int high;
}p1,p2;
int main()
{
return 0;
}
p1和p2都是结构体struct peo类型的变量,而且是全局变量。
struct Peo
{
char name[20];
char tele[12];
char sex[5];
int high;
};
int main()
{
struct peo p;
return 0;
}
p是结构体 struct peo类型的变量,但是它是局部变量。
结构体声明中包含其他结构体变量:
struct Peo
{
char name[20];
char tele[12];
char sex[5];
int high;
};
struct st
{
struct peo p;
int num;
float f;
};
int main()
{
struct peo p;
return 0;
}
结构体struct st中包含了结构体struct peo类型的变量 p
结构体变量的初始化:
struct Peo
{
char name[20];
char tele[12];
char sex[5];
int high;
};
int main()
{
struct peo p = {"张三","15596668862", "男", 181};
return 0;
}
包含了其他结构体变量的初始化:
struct Peo
{
char name[20];
char tele[12];
char sex[5];
int high;
};
struct st
{
struct peo p;
int num;
float f;
};
int main()
{
struct st s = { {"lisi","15596668888","女",166},108,3.14f};
return 0;
}
- 在包含其他结构体的变量时,进行初始化也要把其他结构体变量中的内容进行初始化。
- 比如以上代码中的{"lisi","15596668888","女",166}就是结构体声明struct st中的另一个结构体变量struct peo p的变量的初始化。
初始化的顺序:
记住需要按照结构体成员的顺序初始化
不按照顺序则需要按照以上写法使用 操作符 . 加上成员名 = 初始化的数据
但是以上两种的打印方式是一样的。
结构体变量的打印:
struct Peo
{
char name[20];
char tele[12];
char sex[5];
int high;
};
int main()
{
struct peo p = {"张三","15596668862", "男", 181};
printf("%s %s %s %d\n", p.name, p.tele, p.sex, p.high);
return 0;
}
结构体打印的时候需要使用操作符 “ . ” 进行指引。
格式:结构体变量名 . 结构体成员名
包含其他结构体变量的打印:
struct Peo
{
char name[20];
char tele[12];
char sex[5];
int high;
};
struct st
{
struct peo p;
int num;
float f;
}
int main()
{
struct st s = { {"lisi","15596668888","女",166},108,3.14f};
printf("%s %s %s %d %d %f\n", s.p.name, s.p.tele, s.p.sex, s.p.high, s.num, s.f);
return 0;
}
包含其他结构体变量的打印方式如以上代码所示。
本结构体变量名.其他结构体变量名.列表成员名 —打印出其他结构体变量内部的结构体成员名的格式。
使用指针变量名的打印:
结构体变量的传参:
直接传参:
struct Peo
{
char name[20];
char tele[12];
char sex[5];
int high;
};
void print1(struct Peo p)
{
printf("%s %s %s %d\n", p.name, p.tele, p.sex, p.high);
}
int main()
{
struct peo p = {"张三","15596668862", "男", 181};
print1(p);
return 0;
}
地址传参:
struct Peo
{
char name[20];
char tele[12];
char sex[5];
int high;
};
void print2(struct Peo *sp)
{
printf("%s %s %s %d\n",sp->name, sp->tele,sp->sex,sp->high);
}
int main()
{
struct peo p = {"张三","15596668862", "男", 181};
print2(&p);
return 0;
}
传参地址,在打印的时候需要使用指针名->结构体成员名的格式
void print2(struct Peo *sp)
{
printf("%s %s %s %d\n",sp->name, sp->tele,sp->sex,sp->high);
}
void print1(struct Peo p)
{
printf("%s %s %s %d\n", p.name, p.tele, p.sex, p.high);
}
两种传参的区别:
- 实参直接传给形参,其实是一种拷贝,形参也要开辟一个和实参一样大的空间,而后将实参的数据拷贝给形参,但是这样子会造成空间浪费,拷贝数据时也会浪费相对因的时间,若实参越大,浪费的空间越大,拷贝的时间越多。
- 把结构体变量的地址作为实参传递给形参,形参就只需要创建一个指针的变量空间,通过这个指针变量找结构体的所在空间位置,进行读取数据。
结论:所以结构体传参的时候一般使用传递结构体变量的地址进行传参。文章来源:https://www.toymoban.com/news/detail-692040.html
文章来源地址https://www.toymoban.com/news/detail-692040.html
到了这里,关于结构体的简单介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!