赞
踩
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
结构的成员可以是标量、数组、指针,甚至是其他结构体。
{成员表列}:↓
注意:结构体类型的名字由一个关键字 struct 和结构体名组合而成的(例如 struct Student)结构体 名是由用户指定的,又称 "结构体标记"(structure tag),以区别于其他结构体类型。上面的结构体声明中Student 就是结构体名(结构体标记)
"成员表列"也称为"域表",每一个成员是结构体中的一个域 。成员名命名规则与变量名相同
- struct point {
- int x;
- int y;
- }; p1; //声明类型的同时定义变量p1
- struct point p2;
- //定义结构体变量p2
- struct stu {
- char name[20]; //名字
- int age; //年龄
- };
- struct stu s = { "lisi",25 };//初始化
-
- struct Node {
- int data;
- struct point p;
- struct Node* next;
-
- }; n = { 10,{4,5},NULL };//结构体的嵌套初始化
-
- struct Node n2 = { 20,{5,6},NULL };//结构体嵌套初始化
我们可以看到 s 里面有成员 name 和age
那我们如何访问呢?
- struct S s;
- strcpy(s.name, "zhangsan");//使用.访问name成员
- s.age = 20;//使用.访问age成员
话不多说直接上代码!
- struct p {
- int data[900];
- int n;
-
- };
- struct p s = { {4,3,2,1},900 };
- //结构体传参
- void point1(struct p s) {
- printf("%d %d\n", s.data,s.n);
- }
- //结构体地址传参
- void point2(struct p* s1) {
- printf("%d %d\n", s1->data, s1->n);
- }
- int main() {
- point1(s);//传结构体
- point2(&s);//传地址
- return 0;
- }
对于上面的两种函数 point 1和 point2 哪种函数好一些呢?
首选 point2 函数
原因:
函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。