IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 熟悉c语言结构体 -> 正文阅读

[C++知识库]熟悉c语言结构体

一. 结构体的声明

1. 基础知识

为什么会有结构体呢 有了int float这些类型的变量不就够了嘛?

我们说 要描述一个复杂对象的时候 光靠简单的int 和float是不能够准确描述的

例如学生 他要有名字 要有学号等等

1.2 结构体的声明

我们规定 结构体声明要满足以下格式

struct tag
{
	member - list;
}variable-list;

例如 我们使用结构体来描述一个学生

struct stu
{
	char name[20];//名字
	int age;//年龄
	char sex[5];//性别
	char id[20];//学号
}stu;//分号不能丢
//实际上上面一行的stu是一个全局变量  我们在使用结构体创建变量的时候一般要使用局部变量

1.3 结构成员的类型

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

1.4 结构体变量的定义和初始化

struct Point
{
	int x;
	int y;
}p1;

struct Point p2; //定义结构体变量p2

// 初始化 定义变量的同时赋值 
struct Point p3 = { 2,3 };

定义初始化的三种方式

p1 p2 p3

struct Point
{
	int x;
	int y;
}p1;

struct Point p2; //定义结构体变量p2

// 初始化 定义变量的同时赋值 
struct Point p3 = { 2,3 };

struct Node
{
	int date;//整形
	struct Point p;//结构体类型
	struct Node* next;//指针类型
};

struct Node n1 ={2,{2,3},NULL };

放置结构体中的三种类型

二. 结构体成员的访问

1. 结构体变量访问成员

结构变量成员是通过点操作符来访问的。

点操作符接受两个操作数。 例如 :

struct stu
{
	char name[20];
	int age;
};

struct stu s1={"xiaomengxin",18 };

int main()
{
	s1.age = 20;//使用.访问age

}

那么同学们思考一下可不可以使用上面的操作来修改name呢?

答案是不可以

因为s1.name其实访问的是name这个数组的地址 地址是不能被修改的

那么我们要怎么修改呢 ?

还记不记得我们之前学过一个函数

strcpy()

struct stu
{
	char name[20];
	int age;
};

struct stu s1={"xiaomengxin",18 };

int main()
{
	s1.age = 20;//使用.访问age
	strcpy(s1.name, "9527");
}

这样子就可以啦

2. 结构体指针访问成员的变量

	struct stu* p = &s1;
	(*p).age;
	(*p).name;
	p->age;
	p->name;

和结构体变量差不多

要注意的是多了一个可以用指针变量指向结构体成员的方法

三. 结构体传参


struct S
{
	int date[1000];
	int num;
};

struct S s1 = { {1,2,3,4} ,5 };

void print1(struct S s1)
{
	printf("%d\n", s1.num);
}


void print2(struct S* p1)
{
	printf("%d\n", p1->num);
}


int main()
{
	print1(s1);
	print2(&s1);
	return 0;
}

上面的代码就能很好的说明问题

两种传参方式

传值调用和传址调用

我们这里推荐使用传址调用 至于原因呢 大家可以参考我写的这两篇博客

函数栈帧上

函数栈帧下

以上就是本篇博客的全部内容啦 由于博主才疏学浅 所以难免会出现纰漏 希望大佬们看到错误之后能够

不吝赐教 在评论区或者私信指正 博主一定及时修正

那么大家下期再见咯

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 10:54:41  更:2022-09-13 10:55:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 12:20:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码