空调设备公司网站建设,wordpress 查询文章,自己在家开网站做推广,大型网站建设机构文章目录1. 结构体的声明1.1 结构的基础知识1.2 结构的声明1.3 结构成员的类型1.4 结构体变量的定义和初始化2. 结构体成员的访问3. 结构体传参1. 结构体的声明
1.1 结构的基础知识 结构是一些值的集合#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 …
文章目录1. 结构体的声明1.1 结构的基础知识1.2 结构的声明1.3 结构成员的类型1.4 结构体变量的定义和初始化2. 结构体成员的访问3. 结构体传参1. 结构体的声明
1.1 结构的基础知识 结构是一些值的集合这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.2 结构的声明
struct tag
{member-list;
}variable-list;例如描述一本书 第一种写法
struct Book
{//成员变量char name[20];//名字int price;//价格
};//分号不能丢第二种写法
struct Book
{char name[20];int price;
}b1,b2,b3;//变量第三种写法
typedef struct Book//typedef对类型重命名
{char name[20];int price;
}Book;1.3 结构成员的类型 结构的成员可以是标量、数组、指针甚至是其他结构体。 1.4 结构体变量的定义和初始化
看代码
#include stdio.h
struct S
{char c;char arr[10];int* p;
}s1, s2; // 声明类型的同时定义变量s1,s2struct S s3;//全局变量struct B
{int a;struct S s;double d;
}sb1, sb2;struct B sb3;int main()
{//初始化定义变量的同时赋初值struct S s4 {c, zhangsan, NULL};//局部变量并对其初始化int a 10;struct B sb4 { 100, {q, lisi, a}, 3.14};return 0;
}2. 结构体成员的访问
结构体变量访问成员 结构变量的成员是通过点操作符.访问的。点操作符接受两个操作数。 例如
#include stdio.h
struct Book
{char name[20];int price;
};
int main()
{struct Book b1 { C结构体,66 };struct Book b2 { .price 88,.name C };//结构体变量.结构体成员printf(%s %d\n, b1.name, b1.price);printf(%s %d\n, b2.name, b2.price);return 0;
}结构体指针访问指向变量的成员 有时候我们得到的不是一个结构体变量而是指向一个结构体的指针。 那该如何访问成员。 如下
#include stdio.h
struct Stu
{char name[20];int age;
};
void print(struct Stu* ps)
{printf(name %s age %d\n, (*ps).name, (*ps).age);//使用结构体指针访问指向对象的成员printf(name %s age %d\n, ps-name, ps-age);
}
int main()
{struct Stu s { zhangsan, 20 };print(s);//结构体地址传参return 0;
}3. 结构体传参
看代码
#include stdio.h
struct S
{int arr[100];int n;
};
//结构体传参
void print1(struct S ss)
{int i 0;for (i 0; i 10; i){printf(%d , ss.arr[i]);}printf(\n%d\n, ss.n);
}
//结构体地址传参
void print2(struct S* ps)
{int i 0;for (i 0; i 10; i){printf(%d , ps-arr[i]);}printf(\n%d\n, ps-n);
}int main()
{struct S s { {1,2,3,4,5}, 100 };print1(s);//传结构体print2(s);//传地址return 0;
}
上面的 print1 和 print2 函数哪个好些 答案是首选print2函数。 原因 函数传参的时候参数是需要压栈的。 如果传递一个结构体对象的时候结构体过大参数压栈的的系统开销比较大所以会导致性能的 下降。 结论 结构体传参的时候要传结构体的地址