C语言初阶-结构体
2022/8/8 23:24:21
本文主要是介绍C语言初阶-结构体,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
C语言初阶之结构体
前言
本文主要为结构体。
一、结构体的声明
1.结构的基础知识
数组:是一组相同类型元素的集合。
结构:是一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量。
2.结构的声明
定义方式:
struct tag { member-list; }variable-list;
例:
typedef struct Stu { char name[20];//名字 int age;//年龄 char sex[5];//性别 char id[20];//学号 }Stu;//分号不能丢,Stu是结构体创建的变量
3.结构成员的类型
结构的成员可以是标量、数组、指针,甚至是其他结构体。
4.结构体变量的定义和初始化
结构体变量的定义和初始化:
//声明类型的同时定义变量 struct Point //类型声明 { int x; char y; }p1; //定义结构体变量 struct Point p2; //初始化:定义变量的同时赋初值 struct Point p3 = {x,"y"}; //结构体嵌套初始化 struct Node { int data; struct Point p; struct Node* next; }n1 = {10, {4,5}, NULL}; struct Node n2 = {20, {5, 6}, NULL};
例:
#include <stdio.h> #include <stdlib.h> struct X { char a; int b; }; struct Stu //类型 { //结构的成员变量 struct X x; char name[20];//名字 int age;//年龄 char id[20]; }s1,s2;//结构体创建的全局变量 int main() { struct Stu s = {{'x',2},"Wolverine",18,"123456"}; //局部变量(拿类型创建对象) printf("%c\n",s.x.a); printf("%s\n",s.id); struct Stu* ps = &s; printf("%c\n",(*ps).x.a); printf("%c\n",ps->x.a); return 0; }
二、结构体成员的访问
- 结构体变量访问成员
结构变量的成员是通过点操作符.
访问的,点操作符接受两个操作数。
例:
#include <stdio.h> #include <stdlib.h> struct X { char a; }; struct Stu { struct X x; char name[20]; }; int main() { struct Stu s = {{'x'},"Wolverine"}; printf("%c\n",s.x.a); printf("%s\n",s.name); return 0; }
- 结构体指针访问指向变量的成员
有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针。
例:
#include <stdio.h> #include <stdlib.h> struct X { char a; }; struct Stu { struct X x; char name[20]; }; int main() { struct Stu s = {{'x'},"Wolverine"}; struct Stu* ps = &s; printf("%c\n",(*ps).x.a); printf("%c\n",ps->x.a); return 0; }
三、结构体传参
代码:
#include <stdio.h> #include <stdlib.h> struct S { int data[10]; int num; }; //结构体传参 void print1(struct S t) { printf("%d\n", t.num); } //结构体地址传参 void print2(struct S* ps) { printf("%d\n", ps->num); } int main() { struct S s = {{1,2,3}, 5}; print1(s); //传值调用 print2(&s); //传址调用 return 0; }
注:结构体传参的时候,要传结构体的地址。
原因:函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。
函数调用的参数压栈
栈:是一种数据结构,先进的后出,后进的先出
例:
#include <stdio.h> #include <stdlib.h> int Add(int x, int y) { int z = 0; z = x + y; return 0; } int main() { int a = 1; int b = 2; int c = 0; c = Add(a,b); return 0; }
结尾
这篇关于C语言初阶-结构体的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-04-26高性能表格工具VTable总体构成-icode9专业技术文章分享
- 2024-04-16软路由代理问题, tg 无法代理问题-icode9专业技术文章分享
- 2024-04-16程序猿用什么锅-icode9专业技术文章分享
- 2024-04-16自建 NAS 的方案-icode9专业技术文章分享
- 2024-04-14ansible 在远程主机上执行脚本,并传入参数-icode9专业技术文章分享
- 2024-04-14ansible 在远程主机上执行脚本,并传入参数, 加上remote_src: yes 配置-icode9专业技术文章分享
- 2024-04-14ansible 检测远程主机的8080端口,如果关闭,则echo 进程已关闭-icode9专业技术文章分享
- 2024-04-14result 成功怎么写-icode9专业技术文章分享
- 2024-04-14stopped 状态设置为变量,由外部传递进来-icode9专业技术文章分享
- 2024-04-14为什么ansible执行远程脚本需要放到后台-icode9专业技术文章分享