一、结构体声明

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的更多相关文章

  1. C#结构体和字节数组的转换函数

    在通信过程中,一般我们都会操作到字节数组.特别是希望在不同语言编程进行操作的时候. 虽然C#提供了序列化的支持,不用字节数组也行.但操作字节数组肯定会碰到.   一般都会采用结构来表示字节数组.但结构 ...

  2. C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

    原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...

  3. 深入理解指针—>结构体里的成员数组和指针

    单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接.微博截图如 ...

  4. c动态分配结构体二维数组

    这个问题我纠结了蛮久了,因为前面一直忙(自己也懒了点),所以没有能好好研究这个.希望这篇文章能够帮助你们. #include <stdio.h> #include <stdlib.h ...

  5. NumPy-快速处理数据--ndarray对象--多维数组的存取、结构体数组存取、内存对齐、Numpy内存结构

    本文摘自<用Python做科学计算>,版权归原作者所有. 上一篇讲到:NumPy-快速处理数据--ndarray对象--数组的创建和存取 接下来接着介绍多维数组的存取.结构体数组存取.内存 ...

  6. c#中关于结构体和字节数组转化

    最近在使用结构体与字节数组转化来实现socket间数据传输.现在开始整理一下.对于Marshal可以查阅msdn,关于字节数组与结构体转代码如下: using System; using System ...

  7. c结构体里的数组与指针

    /* 訪问成员数组名事实上得到的是数组的相对地址.而訪问成员指针事实上是相对地址里的内容 */ struct buf_str { int length; char buf[0]; }; struct ...

  8. 【VS开发】【编程开发】【C/C++开发】结构体中的数组与指针的内存分配情况说明

    [VS开发][编程开发][C/C++开发]结构体中的数组与指针的内存分配情况说明 标签:[VS开发] [编程开发] 主要是疑惑在结构体定义的数组的内存空间与指针动态分配的内存空间,在地址上连续性.以及 ...

  9. C语言--- 高级指针2(结构体指针,数组作为函数参数)

    一.结构体指针 1. 什么是结构体指针?指向结构体变量的指针     结构体:     typedef  struct stu{                          char name[ ...

随机推荐

  1. [啃书] 第3篇 - 结构体及其操作/浮点数&圆周率/复杂度/测试

    啃书部分已单独做成Gitbook了,后续不再更新.详情访问个人网站ccoding.cn或ccbyte.github.io 前言 本篇总结自<算法笔记>2.8-2.10 正文 知识点1:结构 ...

  2. vue 快速入门 系列 —— 使用 vue-cli 3 搭建一个项目(下)

    其他章节请看: vue 快速入门 系列 使用 vue-cli 3 搭建一个项目(下) 上篇 我们已经成功引入 element-ui.axios.mock.iconfont.nprogress,本篇继续 ...

  3. MAC VMware fusion 12.1.0 Centos7 网络配置

    虚拟机选择NAT模式 获取mac机器中vmnet8的gateway地址 找到 # NAT gateway address这一行,下面的ip就是gateway地址 cat /Library/Prefer ...

  4. QuantumTunnel:v1.0.0 正式版本发布

    经过一段时间运行,代码已经稳定是时候发布正式版本了! v1.0.0 正式版本发布 对核心能力的简要说明: 支持协议路由和端口路由:QuantumTunnel:端口路由 vs 协议路由 基于Netty实 ...

  5. [atACL001F]Center Rearranging

    有一个(比较显然又有点假的)结论:最优方案中(若存在),每一个数(指$3n$个)最多被移动1次 先$o(n^{2})$枚举移动到队首和队尾的操作次数(即目标状态的一个前缀和后缀),判定能否合法 首先, ...

  6. mybatis-参数如何测试

    mybatis参数非常多测试的时候定位bug一直是个问题,如果老用大部分时间来定位一个错误的参数,太浪费时间了...

  7. 从一个小Bug,到Azure DevOps

    1. 一个小Bug 最近和同事提起一个几年前的 Bug,那是一个很小很小的 Bug,没什么技术含量.那时候我刚入职,正好公司卖了一款仪器到某个国家,但是那边说配套的软件运行不起来,一打开就报错.经过排 ...

  8. 『学了就忘』Linux文件系统管理 — 59、使用fdisk命令进行手工分区

    目录 1.手工分区前提 (1)要有一块新的硬盘 (2)在虚拟机中添加一块新硬盘 2.手工分区 (1)查看Linux系统所有硬盘及分区 (2)手工分区:详细步骤 (3)保存手工分区 3.硬盘格式化 4. ...

  9. CF1156F Card Bag

    题目传送门. 题意简述:有 \(n\) 张卡牌,每张卡牌有数字 \(a_1,a_2,\cdots,a_n\).现在随机抽取卡牌,不放回,设本次抽到的卡牌为 \(x\),上次抽到的卡牌为 \(y\),若 ...

  10. centos 7的命令变化

    1.service -> systemctl命令 2.ifconfig -> ip 命令 3.netstat -> ss命令 4.route -> ip route命令 5.t ...