当前位置:网站首页>C语言-结构体
C语言-结构体
2022-08-11 07:38:00 【天黑再醒】
目录
一.结构体类型的声明
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。结构的成员可以是标量、数组、指针,甚至是其他结构体。例如定义一名学生的信息:#include<stdio.h> typedef struct Stu //typedef可以省略,struct不能随便省略 { char name[20];//名字 int age;//年龄 char sex[5];//性别 char id[20];//学号 }Stu; //变量列表 int main() { struct Stu s1; struct Stu s2; Stu s3; return 0; }
二.结构体变量的定义和初始化
struct Point
{
int x;
int y;
}p1={21,14};//定义变量的同时赋初值.
struct X
{
char c;
struct Point p;
double d;
char arr[21];
};
int main ()
{
struct Point p={100,23};
struct X sx={ 'x',{12,23},3.14,"hello"};
return 0;
}
三.结构体成员的访问,结构体传参
结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数。#include<stdio.h> struct Point { int x; int y; }p1={21,14}; struct X { char c; struct Point p; double d; char arr[21]; }; int main () { struct Point p={100,23}; struct X sx={ 'x',{12,23},3.14,"hello"}; printf("%c\n",sx.c); printf("%d %d\n",sx.p1.x,sx.p1.y); printf("%lf\n",sx.d); printf("%s\n",sx.arr); return 0; }
有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针。#include<stdio.h> struct Point { int x; int y; }p1={21,14}; struct X { char c; struct Point p1; double d; char arr[21]; }; // void print1(struct X s) // { // printf("%c\n",s.c); // printf("%d %d\n",s.p1.x,s.p1.y); // printf("%lf\n",s.d); // printf("%s\n",s.arr); // } void print2(struct X* ps) { printf("%c\n",ps->c); printf("%d\n",ps->p1.x,ps->p1.y); printf("%lf\n",ps->d); printf("%s\n",ps->arr); } int main () { struct Point p={100,23}; struct X sx={ 'x',{12,23},3.14,"hello"}; //如果想修改信息 //sx.c='d'; //这样即可 // print1(sx); // 打印struct X类型的变量 print2(&sx); return 0; }
上面的 print1 和 print2 函数哪个好些?答案是:首选print2函数。原因:函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。结论:结构体传参的时候,要传结构体的地址。
边栏推荐
猜你喜欢
3.1-Classification-probabilistic generative model
The easiest trick to support quick renaming of various files
测试用例很难?有手就行
1076 Wifi Password (15 points)
记录一些遇见的bug——Lombok和Mapstruct的冲突导致,A component required a bean of type ‘com.XXX.controller.converter.
1096 big beautiful numbers (15 points)
无服务器+域名也能搭建个人博客?真的,而且很快
Distributed Lock-Redission - Cache Consistency Solution
零基础SQL教程: 基础查询 05
1081 Check Password (15 points)
随机推荐
Service的两种状态形式
cdc连sqlserver异常对象可能有无法序列化的字段 有没有大佬看得懂的 帮忙解答一下
流式结构化数据计算语言的进化与新选择
项目2-年收入判断
TF中的四则运算
我的创作纪念日丨感恩这365天来有你相伴,不忘初心,各自精彩
1071 Small Gamble (15 points)
Test cases are hard?Just have a hand
1106 2019数列 (15 分)
JUC并发编程
The easiest trick to support quick renaming of various files
如何仅更改 QGroupBox 标题的字体?
1061 True or False (15 points)
TF中使用softmax函数;
零基础SQL教程: 主键、外键和索引 04
8、Mip-NeRF
Pico neo3在Unity中的交互操作
1091 N-Defensive Number (15 points)
通过记账,了解当月收支情况
1036 跟奥巴马一起编程 (15 分)