【C++】结构体/结构体数组/结构体指针/结构体嵌套/函数参数/const
一、结构体声明
struct Student
{
//成员列表
string name;
int age;
int score;
}; //s3;定义时直接声明
int main()
{
struct Student s1;
//法一、直接赋值
s1.name = "Apple";
s1.age = 10;
//法二、直接声明
struct Student s2 = {"Banana", 19, 80}; //不可跳着声明
}
二、结构体数组
//创建结构体数组
int main()
{
struct Student stuArray[3] =
{
{"Apple", 19, 80},
{"Banana", 18, 99},
{"Cat", 17, 70}
}; //注意逗号,分号的位置
}
//给结构数组中赋值
int main()
{
struct Student stuArray[3] =
{
{"Apple", 19, 80},
{"Banana", 18, 99},
{"Cat", 17, 70}
};
stuArray[0].name = "Dog";
cout << stuArray[0].name << stuArray[0].score <<endl;
system("pause");
}
//遍历结构体数组:for循环
三、结构体指针
int main()
{
struct Student stuArray[3] =
{
{"Apple", 19, 80},
{"Banana", 18, 99},
{"Cat", 17, 70}
};
stuArray[0].name = "Dog";
cout << stuArray[0].name << stuArray[0].score <<endl;
//结构体指针
Student* p = &stuArray[0]; //定义
int a = p -> score; //访问 ->
cout << a <<endl;
system("pause");
}
四、结构体嵌套结构体
struct Student
{
//成员列表
string name;
int age;
int score;
};
struct Teacher
{
int id;
string name;
int age;
struct Student stu;
};
五、结构体作为函数参数
结构体作为函数参数有值传递和地址传递两种。
#include <iostream>
#include <stdlib.h>
using namespace std;
struct Student
{
//成员列表
string name;
int age;
int score;
};
//值传递
void printStudent(struct Student s)
{
s.name = "Banana";
cout << "name: " << s.name << "age: " << s.age << "score: " << s.score <<endl;
}
//地址传递
void printStudent2(struct Student* p)
{
//p->name = "Banana";
cout << "name: " << p->name << "age: " << p->age << "score: " << p->score << endl;
}
int main()
{
struct Student s;
s = {"Apple", 20, 89};
printStudent(s);
struct Student* p = &s;
printStudent2(p);
cout << "name: " << p->name << "age: " << p->age << "score: " << p->score << endl;
system("pause");
}
六、结构体中使用const场景
用于防止误操作。
因为值传递浪费空间,所以一般使用地址传递。
如果函数使用了地址传递,函数内操作会改变实参值,为了防止实参被乱修改,使用const。


用于设置只能读不能写。
【C++】结构体/结构体数组/结构体指针/结构体嵌套/函数参数/const的更多相关文章
- C#结构体和字节数组的转换函数
在通信过程中,一般我们都会操作到字节数组.特别是希望在不同语言编程进行操作的时候. 虽然C#提供了序列化的支持,不用字节数组也行.但操作字节数组肯定会碰到. 一般都会采用结构来表示字节数组.但结构 ...
- C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com
原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...
- 深入理解指针—>结构体里的成员数组和指针
单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接.微博截图如 ...
- c动态分配结构体二维数组
这个问题我纠结了蛮久了,因为前面一直忙(自己也懒了点),所以没有能好好研究这个.希望这篇文章能够帮助你们. #include <stdio.h> #include <stdlib.h ...
- NumPy-快速处理数据--ndarray对象--多维数组的存取、结构体数组存取、内存对齐、Numpy内存结构
本文摘自<用Python做科学计算>,版权归原作者所有. 上一篇讲到:NumPy-快速处理数据--ndarray对象--数组的创建和存取 接下来接着介绍多维数组的存取.结构体数组存取.内存 ...
- c#中关于结构体和字节数组转化
最近在使用结构体与字节数组转化来实现socket间数据传输.现在开始整理一下.对于Marshal可以查阅msdn,关于字节数组与结构体转代码如下: using System; using System ...
- c结构体里的数组与指针
/* 訪问成员数组名事实上得到的是数组的相对地址.而訪问成员指针事实上是相对地址里的内容 */ struct buf_str { int length; char buf[0]; }; struct ...
- 【VS开发】【编程开发】【C/C++开发】结构体中的数组与指针的内存分配情况说明
[VS开发][编程开发][C/C++开发]结构体中的数组与指针的内存分配情况说明 标签:[VS开发] [编程开发] 主要是疑惑在结构体定义的数组的内存空间与指针动态分配的内存空间,在地址上连续性.以及 ...
- C语言--- 高级指针2(结构体指针,数组作为函数参数)
一.结构体指针 1. 什么是结构体指针?指向结构体变量的指针 结构体: typedef struct stu{ char name[ ...
随机推荐
- PHP、TP6框架及JavaScript的单步调试
目录 一.PHP程序的调试 1. 单个PHP程序的调试 2. PHP框架代码的调试 二.JavaScript程序的调试 三.总结 参考资料:https://www.bilibili.com/video ...
- 问题 L: Yougth的最大化
题目描述 Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从中选出k个物品使得单位重量的价值最大吗? 输入 有多组测试数据 每组测试数据第一行有两个数n和k,接下来一行有n个数Wi和V ...
- Effective C++ 总结笔记(三)
三.资源管理 13.以对象管理资源 1.为了防止资源泄漏,请使用RAII对象,在构造函数里面获得资源,并在析构函数里面释放资源. 2. 引用计数型智慧指针(RCSP):持续追踪多少个指针指向该资源,无 ...
- request模块做post请求时,body为json格式,并且带有中文,如何请求
后台接口只能解析json,并且一定要是中文才能解析出来,如果是unicode编码的中文则会报错 看requests的源码.以下为解决方法: #将requests库中的models.py文件中的第461 ...
- 一些需要记住的linux命令
1. 系统帮助命令 ----man 2. 数据同步写入磁盘 ----sync 3. 查找文件命令 ...
- Codeforces 516E - Drazil and His Happy Friends(同余最短路)
Codeforces 题面传送门 & 洛谷题面传送门 首先思考一个非常简单的性质:记 \(d=\gcd(n,m)\),那么每次在一起吃完饭的男女孩编号必定与 \(d\) 同余,而根据斐蜀定理可 ...
- 洛谷 P4437 [HNOI/AHOI2018]排列(贪心+堆,思维题)
题面传送门 开始 WA ycx 的遗产(bushi 首先可以将题目转化为图论模型:\(\forall i\) 连边 \(a_i\to i\),然后求图的一个拓扑序 \(b_1,b_2,\dots b_ ...
- 【Python小试】统计一条核酸序列中频数非0或为2的双核苷酸
概念 双核苷酸由任意2个碱基组成 测试1 dna = "AATGATGAACGAC" #一一列举 dinucleotides = ['AA','AT','AG','AC', 'TA ...
- phpexcel 另存Excel文件方式
$w = new PHPExcel_Writer_Excel5($e); $dir = 'path/title.xls'; $w->save($dir);
- SpringCloud微服务实战——搭建企业级开发框架(三十一):自定义MybatisPlus代码生成器实现前后端代码自动生成
理想的情况下,代码生成可以节省很多重复且没有技术含量的工作量,并且代码生成可以按照统一的代码规范和格式来生成代码,给日常的代码开发提供很大的帮助.但是,代码生成也有其局限性,当牵涉到复杂的业务逻辑 ...