当前位置: 首页 > article >正文

结构体——C语言初阶

一.结构体的声明:

(1)结构的基础知识:
  • 结构体是一种构造数据类型
  • 把不同类型的数据组合成一个整体
  • 结构体是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量
  • 需要注意的是,结构体是一种自定义的数据类型,是创建变量的模板,不占用内存空间;结构体变量才包含了实实在在的数据,需要内存空间来存储。

(2)结构的声明:
  1. 定义全局变量:
    #include<stdio.h>
    struct People
    {
    	char name[20];
    	int age;
    	char sex[5];
    	char tele[12];
    	int high;
    }p1,p2;
    //p1,p2是两个全局变量的结构体变量
    int main()
    {
    	return 0;
    }

  2. 定义局部变量
    #include<stdio.h>
    struct People
    {
    	char name[20];
    	int age;
    	char sex[5];
    	char tele[12];
    	int high;
    };
    int main()
    {
    	struct People p1;//结构体变量的创建
    	return 0;
    }

注意:不要忘记分号!在结束花括号后的分号表示结构体设计定义的结束;

(3)结构体成员的类型:

结构体成员可以是标量、数组、指针、甚至是其他结构体

(4)结构体变量的定义和初始化:

初始化:定义变量的同时赋初值

定义的三种方式(上面提到了):

#include<stdio.h>
struct People
{
	char name[20];
	int age;
	char sex[5];
	char tele[12];
	int high;
}p1,p2;
//p1,p2是两个全局变量的结构体变量
struct People p3;//全局变量
int main()
{
	struct People p4;//局部变量
	return 0;
}

赋值并打印(嵌套):

#include<stdio.h>
struct Peo
{
	char name[20];
	int age;
	char sex[5];
};
struct BOOK
{
	int page;
	struct Peo s;
};
int main()
{
	struct Peo p1 = { "blf",19,"boy" };
	struct BOOK p2 = { 65,{"qsl",19,"girl"} };
	printf("%s %d %s\n", p1.name, p1.age, p1.sex);
	printf("%d %s %d %s\n", p2.page, p2.s.name, p2.s.age, p2.s.sex);
	
	return 0;
}

输出结果:blf 19 boy
                  65 qsl 19 girl


二.结构体成员的访问:

  • C语言规定,结构体的普通成员可以通过运算符“点.”去访问其成员
  • 点操作符接受两个操作数。
  • 引用形式:<结构体类型变量名>.<成员名>
  • 结构体指针变量如何访问其成员:可以通过箭头符号的方式去访问其成员
  • (*p).name = = p -> name 左右两种方式等价
  • 结构体成员如果是字符串,不能直接通过符号“=”去修改值,可以通过C语言中的拷贝函数strcpy去修改值

配合代码理解:

#include<stdio.h>
struct Peo
{
	char name[20];
	int age;
	char sex[5];
};
struct BOOK
{
	int page;
	struct Peo s;
};
void print1(struct Peo p)
{
	printf("%s %d %s\n", p.name, p.age, p.sex);
}
void print2(struct Peo* sp1)
{
	printf("%s %d %s\n", sp1->name, sp1->age, sp1->sex);
	printf("%s %d %s\n", (*sp1).name, (*sp1).age, (*sp1).sex);
}
int main()
{
	struct Peo p1 = { "blf",19,"boy" };
	struct BOOK p2 = { 65,{"qsl",19,"girl"} };
	printf("%s %d %s\n", p1.name, p1.age, p1.sex);
	printf("%d %s %d %s\n", p2.page, p2.s.name, p2.s.age, p2.s.sex);
	print1(p1);
	print2(&p1);
	return 0;
}


三.结构体传参:

  1. 函数传参的时候,参数是需要压栈的,如果传递一个结构体对象的时候,结构体过大,参数压栈的系统开销比较大,所以会导致性能的下降;
  2. 结论:结构体传参时,要传结构体的地址


http://www.kler.cn/news/134066.html

相关文章:

  • 飞天使-django之数据库简介
  • 汽车 CAN\CANFD数据记录仪
  • 【LeetCode刷题-树】--1367.二叉树中的链表
  • 什么是PWA(Progressive Web App)?它有哪些特点和优势?
  • spark算子简单案例 - Python
  • 关于DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC的一些发现
  • 自学嵌入式,已经会用stm32做各种小东西了
  • 小米路由器AX1800降级后的SSH登录和关墙等命令
  • 【数据结构(二)】队列(2)
  • centos7安装mongodb
  • Cross-View Transformers for Real-Time Map-View Semantic Segmentation 论文阅读
  • 木子-前端-方法标签属性小记(普通jsp/html篇)2023~2024
  • Redis为什么是单线程的?Redis性能为什么很快?
  • psql 模式(SCHEMA)
  • ICCV 23丨3D-VisTA:用于 3D 视觉和文本对齐的预训练Transformer
  • python科研绘图:面积图
  • 一些RLHF的平替汇总
  • c语言常见的面试问题
  • Qt HTTP 摘要认证(海康球机摄像机ISAPI开发)
  • C语言——1.入门须知
  • TikTok与媒体素养:如何辨别虚假信息?
  • SpirngBoot + Vue 前后端分离开发工具代码
  • 阶乘算法优化
  • curl网络请求命令
  • milvus数据库索引管理
  • ClickHouse查看执行计划
  • CI/CD -gitlab
  • Notepad+正则表达式使用方法
  • ubuntu20编译ffmpeg3.3.6
  • Python实现视频字幕时间轴格式转换