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

c++基础学习第三天(指针,结构体)

c++基础学习第三天(指针,结构体)

文章目录

  • 1、指针
    • 1.1、指针的基本概念
    • 1.2、指针变量的定义和使用
    • 1.3、 指针所占内存空间
    • 1.4、空指针和野指针
    • 1.5、 const修饰指针
      • 1.5.1、const修饰指针-常量指针
      • 1.5.2、const修饰常量-指针常量
      • 1.5.3、const即修饰指针,又修饰常量
  • 2、结构体
    • 2.1、结构体基本概念
    • 2.2、结构体定义和使用
    • 2.3、结构体数组
    • 2.4、结构体指针
    • 2.5、结构体嵌套结构体
    • 2.6、结构体做函数参数
    • 2.7、结构体中const使用场景


1、指针

1.1、指针的基本概念

指针的作用:可以通过指针间接访问内存

  • 内存编号是从0开始记录的,一般用十六进制数字表示
  • 可以利用指针变量保存地址

1.2、指针变量的定义和使用

指针变量定义语法:*数据类型 变量名;

//1、定义指针
int a1 = 10;
// 指针定义的语法:数据类型 * 指针变量名:
int *p;
// 让指针记录变量a的地址
p = &a1;
cout << "a的地址为:" << &a1 << endl;
cout << "指针p为:" << p << endl;
//2、使用指针
//可以通过解引用的方式来找到指针指向的内存,查看内存内容。
//指针前加 * 代表解引用,找到指针指向的内存中的数据
*p = 1000;
cout << "a1 = " << a1 << endl;
cout << "*p=" << *p << endl;

1.3、 指针所占内存空间

提问:指针也是种数据类型,那么这种数据类型占用多少内存空间?

在32位操作系统下:占用4个字节空间,64位下占8个字节。不管是什么数据类型

//指针所占内存空间
int a2 = 10;
//int p;
//p=&a:
int *p1 = &a2;
//在32位操作系统下,指针是占4个字节空间大小,***不管是什么数据类型***
//在64位操作系统下,指针是占8个字节空间大小
cout << "sizeof(int*)=" << sizeof(int*) << endl;
cout << "sizeof (float*)=" << sizeof(float*) << endl;
cout << "sizeof (double*)=" << sizeof(double*) << endl;
cout << "sizeof(char*)="<< sizeof(char*) << endl;

1.4、空指针和野指针

空指针:指针变量指向内存中编号为0的空间
用途:初始化指针变量
注意:空指针指向的内存是不可以访问的

空指针

//1、空指针用于给指针变量进行初始化
int *p4 =  NULL;
// 2、空指针(0号内存空间)是不可以进行访问的
//0~255之间的内存编号是系统占用的,因此不可以访问
//*p = 100;

野指针:指针变量指向非法的内存空间(不是自己申请的内存空间)

/野指针
//在程序中,尽量避免出现野指针
int *p = (int*)0x1100;
cout << * p << endl;

总结:空指针和野指针都不是我们申请的空间,因此不要访问。

1.5、 const修饰指针

const修饰指针有三种情况:

1.5.1、const修饰指针-常量指针

const int *p=&a:

常量指针
特点:指针的指向可以修改,但是指针指向的值不可以改
*p=20;错误,指针指向的值不可以改
p=&b;正确,指针指向可以改

1.5.2、const修饰常量-指针常量

int * const p=&a:

指针常量
特点:指针的指向不可以改,指针指向的值可以改
*p=20;正确,指向的值可以改
p=&b;错误,指针指句不可以改

1.5.3、const即修饰指针,又修饰常量

const int * const p =a;

特点:指针的指向和指针指向的值都不可以改
*p=20;/错误
p=&b;/错误

//1、const修饰指针   常量(const)指针(*)
int a4 = 10;
int b4 = 10;
const int * p7 = &a4;
//指针指向的值(*P)不可以改,指针的指向(p)可以改
//*p=20:错误
p7 = &b4;//正确//2、const修饰常量 指针(*)常量(const)
//指针的指向(p2)不可以改,指针指向的值(*p2)可以改
int * const p5 = &a4;
*p5 = 100; // 正确的
//p2=&b:/错误,指针的指向不可以改// 3、const修饰指针和常量
const int * const p6 = &a4;
//指针的指向和指针指向的值都不可以改
//*p3=100;//错误
//b3 = &b; //错误

2、结构体

2.1、结构体基本概念

结构体属于用户自定义的数据类型,允许用户存储不同的数据类型

2.2、结构体定义和使用

语法:struct 结构体名 {结构体成员列表};
通过结构体创建变最的方式有三种:

  • struct 结构体名 变量名
  • struct 结构体名 变量名={成员1值,成员2值…}
  • 定义结构体时便创建变星

通过学生类型创建具体学生

//2.1 struct Student sl
struct Student s1;
//给s1属性赋值,通过.访问结构体变量中的属性
s1.name = "张三";
s1.age = 18;
s1.score = 100;
cout << "姓名:" << s1.name << "  年龄:" << s1.age << "  分数:" << s1.score << endl;
//2.2 struct Student s2 ={..};
struct Student s2 = { "李四",19,80 };
cout << "姓名:" << s2.name << "  年龄:" << s2.age << "  分数:" << s2.score << endl;
//2.3在定义结构体时顺便创建结构体变量
struct Student1 {//成员列表// 姓名string name;// 年龄int age;//分数int score;
}s3;s3.name = "王五";
s3.age = 20;
s3.score = 60;
cout << "姓名:" << s3.name << "  年龄:" << s3.age << "  分数:" << s3.score << endl;

struct关键字可以省略(创建变量时),定义时struct关键字不可以省略。
总结1:定义结构体时的关键字是struct,不可省略
总结2:创建结构体变是时,关键字structi可以省略
总结3:结构体变量利用操作符"."访门成员

2.3、结构体数组

作用:将自定义的结构体放入到数组中方便维护
语法:struct 结构体名 数组名[元素个数]={{},{},·{}};

//1、创建结构体数组
struct Student stuArray[3]{{"张三",18,100},{"李四",28, 99},{ "王五",38,66}
};
// 2、给结构体数组中的元素赋值
stuArray[2].name = "赵六";
stuArray[2].age = 80;
stuArray[2].score = 60;
// 3、遍历结构体数组
for (int i = 0; i < 3; i++) {cout<< "姓名:"<<stuArray[i].name<<"年龄:"<<stuArray[i].age<< "分数:"<< stuArray[i].score<< endl;
}

2.4、结构体指针

作用:通过指针访问结构体中的成员
利用操作符->可以通过结构体指针访问结构体属性

//1、创建学生结构体变量
struct Student s = { "张三",18,100};
//2、通过指针指向结构体变量
struct Student *p =&s;
//3、通过指针访问结构体变量中的数据
cout << "姓名:" << p->name << "年龄:" << p->age << "分数:" << p->score << endl;

2.5、结构体嵌套结构体

作用:结构体中的成员可以是另一个结构体
例如:每个老师辅导一个学员,一个老师的结构体中,记录一个学生的结构体

//定义学生结构体
struct student{string name; // 姓名int age;//年龄int score; // 分数
};//定义老师结构体
struct teacher {int id;//教师编号string name; // 教师姓名int age;//年龄struct student stu;//辅导的学生
};//结构体嵌套结构体
//创建老师
struct teacher t;
t.id = 10000;
t.name = "老王";
t.age = 50;
t.stu.name = "小王";
t.stu.age = 20;
t.stu.score = 60;
cout << "老师姓名:" << t.name << "老师编号:" << t.id << "老师年龄:" << t.age<< "老师辅导的学生姓名:" << t.stu.name << "学生年龄:" << t.stu.age<< "学生考试分数为:" << t.stu.score<<endl;

2.6、结构体做函数参数

作用:将结构体作为参数向函数中传递
传递方式有两种:

  • 值传递
  • 地址传递

总结:如果不想修改主函数中的数据,用值传递反之用地址传递

2.7、结构体中const使用场景

作用:用const来防止误操作

将函数中的形参改为指针,可以减少内存空间,而且不会复制新的副本出来
void printStudents(const student *s)防止函数修改属性值
指针(地址传递)节省空间,值传递会复制一份给函数内的变量。

相关文章:

c++基础学习第三天(指针,结构体)

c基础学习第三天&#xff08;指针&#xff0c;结构体&#xff09; 文章目录 1、指针1.1、指针的基本概念1.2、指针变量的定义和使用1.3、 指针所占内存空间1.4、空指针和野指针1.5、 const修饰指针1.5.1、const修饰指针-常量指针1.5.2、const修饰常量-指针常量1.5.3、const即修…...

【数仓】zookeeper软件安装及集群配置

相关文章 【数仓】基本概念、知识普及、核心技术【数仓】数据分层概念以及相关逻辑【数仓】Hadoop软件安装及使用&#xff08;集群配置&#xff09;【数仓】Hadoop集群配置常用参数说明 一、环境准备 准备3台虚拟机 Hadoop131&#xff1a;192.168.56.131Hadoop132&#xff…...

Qt 实现橡皮擦拭显示图片

1.简介 在一些游戏中看见类似解密破案的效果&#xff0c;使用手触摸去擦拭图片上的灰尘&#xff0c;然后显示最终的图片&#xff0c;所以也想试试Qt实现的效果。大家有自己想做的效果&#xff0c;都可以尝试。 以下是效果展示图。 可以控制橡皮擦的大小&#xff0c;进行擦拭…...

Vue3+Element-Plus中ELMessage样式丢失处理

Vu3Element-Plus项目中,element-plus使用按需引入有时会出现样式失效和在vscode中使用会报错[找不到名称“ElMessage”。ts(2304)]错误 ELMessage弹框样式丢失处理方法 使用按需引入就不能手动再引入 import { ElMessage } from "element-plus";ElMessage.success…...

97 spring 中的泛型类型注入

前言 呵呵 同样是 最近同事碰到的一个问题 他不太懂 英语, 看到的说明是 缺少一个 RedisTemplate 的实例, 但是找到了一个 RedisTemplate 的实例 呵呵 和我这里 spring 版本似乎是不太一样, 错误信息 有一些差异 以下环境基于 jdk8 spring-5.0.4-RELEASE 测试用例 BeanCon…...

C++设计模式

单例模式 单例模式保证一个类只能创建一个对象&#xff0c;并提供全局访问点。通常用于全局共享例如日志、数据库连接池等。 Lazy Initialization 优点&#xff1a;需要时才初始化&#xff0c;节省空间 缺点&#xff1a;线程不安全 class Singleton{ private:static Singlet…...

反向代购业务系统|无货源代购中国商品|反向海淘代购系统

什么是淘宝代购 淘宝代购是近年兴起的一种购物模式&#xff0c;是帮国外客户购买中国商品。主要是通过万邦科技的外贸代购模式&#xff0c;把淘宝、 天猫等电商平台的全站商品通过API接入到你的网站上&#xff0c;瞬间就可以架设一个有数亿产品的大型网上商城&#xff0c;而且…...

Linux 进程间通信

目录 管道 匿名管道&#xff08;pipe&#xff09; 有名管道&#xff08;fifo&#xff09; 小结 共享内存 消息队列 信号量 System V IPC的结构设计 Posix与System V的关系 管道 匿名管道&#xff08;pipe&#xff09; 我们知道&#xff0c;在Linux中通过fork创建的子…...

hippy 调试demo运行联调-mac环境准备篇

适用对于终端编译环境不熟悉的人看&#xff0c;仅mac端 hippy 调试文档官网地址 前提&#xff1a;请使用node16 联调预览效果图&#xff1a; 编译iOS Demo环境准备 未跑通&#xff0c;待补充 编译Android Demo环境准备 1、正常安装Android Studio 2、下载Android NDK&a…...

【golang】go module依赖的git tag被覆盖 如何处理 | 因测试产生大量的git tag 如何清除 最佳实践

一、场景 当我们把本地和远程git仓库的 tag全部删除&#xff0c;我们另外的项目依赖于这个被删除tag无法更新版本 如何处理&#xff1f; 如上图&#xff1a; 这里我创建了一个 v0.0.1 的tag&#xff0c;然后删除了这个tag&#xff0c;然后又创建了一个新的 v0.0.1的tag&#xf…...

Spring Cloud原理详解

Spring Cloud 是基于 Spring Boot 的微服务架构开发工具包&#xff0c;旨在帮助开发人员快速构建分布式系统中的一些常见模式&#xff0c;例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、领导选举、分布式会话和集群状态。Spring Cloud 是 Spring 生态系…...

力扣76. 最小覆盖子串(滑动窗口)

Problem: 76. 最小覆盖子串 文章目录 题目描述思路复杂度Code 题目描述 思路 1.定义两个map集合need和window&#xff08;以字符作为键&#xff0c;对应字符出现的个数作为值&#xff09;&#xff0c;将子串t存入need中&#xff1b; 2.定义左右指针left、right均指向0&#xff…...

使用华为云云函数functiongraph

之前使用腾讯云serverless&#xff0c;但是突然开始收费了。所以改用functiongraph 首先登陆华为云。 目录 1.登录华为云 2.在控制台找到functiongraph并开通 3.添加依赖包&#xff1a; 3.1 制作依赖包 3.2引入依赖包 4.发送请求 4.1直接发送 4.1.1uri 4.1.2 请求头…...

Android logcat系统

一 .logcat命令介绍 android log系统: logcat介绍 : logcat是android中的一个命令行工具&#xff0c;可以用于得到程序的log信息. 二.C/Clogcat访问接口 Android系统中的C/C日志接口是通过宏来使用的。在system/core/include/android/log.h定义了日志的级别&#xff1a; /…...

android 使用协程CoroutineScope 实现定时器

满足延迟执行、立即执行&#xff0c;每次任务间隔时长&#xff0c;总时长的任务 使用1 class TimeViewModel:Viewmodel(){//测试延迟5秒开始执行任务&#xff0c;然后每隔1秒执行1次&#xff0c;总执行时间60秒fun testTime(){var startTime System.currentTimeMillis()log(…...

【algorithm】算法基础课---排序算法(附笔记 | 建议收藏)

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石. &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;AcWing算法学习笔记 &#x1f4ac;总结&#xff1a;希望你看完…...

UnityShader——09数学知识3

方阵 行与列数量相等的矩阵,n*n阶矩阵 对角矩阵 当对角线以外的矩阵内元素全为0&#xff0c;则称之为对角矩阵&#xff0c;对角矩阵的前提是必须是方阵 单位矩阵 对角线元素全为1&#xff0c;其余元素全为0&#xff0c;属于对角矩阵的一部分 矩阵和向量 把1 * n阶矩阵称…...

langchain学习笔记(九)

RunnableBranch: Dynamically route logic based on input | &#x1f99c;️&#x1f517; Langchain 基于输入的动态路由逻辑&#xff0c;通过上一步的输出选择下一步操作&#xff0c;允许创建非确定性链。路由保证路由间的结构和连贯。 有以下两种方法执行路由 1、通过Ru…...

周处除三害在线资源最新电影1080p高清

打开下面这个链接就可以看到 周处除三害在线资源最新电影1080p高清 如果链接打不开&#xff0c;就复制下面的网址到浏览器打开 https://www.zhufaka.cn/liebiao/A09504AE3BF8BD06 用阿里云盘下载&#xff0c;下载完成之后&#xff0c;用迅雷播放 周处除三害在线资源最新电…...

STM32CubeIDE基础学习-新建STM32CubeIDE基础工程

STM32CubeIDE基础学习-新建STM32CubeIDE基础工程 前言 有开发过程序的朋友都清楚&#xff0c;后面开发是不需要再新建工程的&#xff0c;一般都是在初学时或者有特殊需要的时候才需要新建项目工程的。 后面开发都是可以在这种已有的工程上添加相关功能就行&#xff0c;只要前…...

QMCDecode终极指南:5分钟快速掌握QQ音乐加密格式转换技巧

QMCDecode终极指南&#xff1a;5分钟快速掌握QQ音乐加密格式转换技巧 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac&#xff0c;qmc0,qmc3转mp3, mflac,mflac0等转flac)&#xff0c;仅支持macOS&#xff0c;可自动识别到QQ音乐下载目录&#xff0c;默…...

一幅精细绝伦的[城市或地点]微缩模型

提示词&#xff1a; 一幅精细绝伦的[城市或地点]微缩模型&#xff0c;无缝搭建于质朴的木桌之上&#xff0c;仿佛整个场景都是实时手工制作而成。场景囊括了[城市或地点]最具标志性的地标、建筑、街道、交通、文化元素和氛围&#xff0c;周围环绕着密 地址&#xff1a;https://…...

为什么你的ElevenLabs马来文输出总像“机器人朗读”?资深语音架构师拆解4层韵律建模断层与3个修复级prompt模板

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;为什么你的ElevenLabs马来文输出总像“机器人朗读”&#xff1f;资深语音架构师拆解4层韵律建模断层与3个修复级prompt模板 马来语&#xff08;Bahasa Melayu&#xff09;虽属声调中性语言&#xff0c;…...

提示词失效?双色调渲染偏色?深度解析Midjourney色彩空间转换机制,精准锁定sRGB→Lab双色域锚点

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;提示词失效&#xff1f;双色调渲染偏色&#xff1f;深度解析Midjourney色彩空间转换机制&#xff0c;精准锁定sRGB→Lab双色域锚点 当用户在Midjourney中输入高饱和度提示词&#xff08;如“vibrant cyan neo…...

30天学会AI工程师|Day 30:30 天结束后,最重要的不是兴奋,而是知道下一步该怎么走

你先知道一件事 如果你真的走到了今天&#xff0c;这 30 天已经很不容易。 为什么这一步重要 对零基础来说&#xff0c;你大概率已经完成了一次非常明显的跨越。你可能还远远谈不上成熟工程师&#xff0c;也未必能立刻胜任复杂项目&#xff0c;但你已经不再是那个只会围观 AI 新…...

别再死记硬背了!用Unity可视化工具一步步拆解A*寻路算法(附完整C#源码)

用Unity可视化工具玩转A*寻路算法&#xff1a;从理论到实战的沉浸式学习 在游戏开发的世界里&#xff0c;路径规划算法就像是一位隐形的向导&#xff0c;决定着NPC如何绕过障碍物找到玩家&#xff0c;或是战略游戏中单位如何选择最优行军路线。A*算法作为其中最耀眼的明星&…...

CANN/pypto张量创建指南

Tensor的创建 【免费下载链接】pypto PyPTO&#xff08;发音: pai p-t-o&#xff09;&#xff1a;Parallel Tensor/Tile Operation编程范式。 项目地址: https://gitcode.com/cann/pypto Tensor是PyPTO中的基本数据结构&#xff0c;用于表示将在计算图中使用并在NPU上执…...

FARM问答系统调优终极指南:置信度校准与答案排序策略详解

FARM问答系统调优终极指南&#xff1a;置信度校准与答案排序策略详解 【免费下载链接】FARM :house_with_garden: Fast & easy transfer learning for NLP. Harvesting language models for the industry. Focus on Question Answering. 项目地址: https://gitcode.com/g…...

Mainframer错误排查指南:常见问题及解决方法大全

Mainframer错误排查指南&#xff1a;常见问题及解决方法大全 【免费下载链接】mainframer Tool for remote builds. Sync project to remote machine, execute command, sync back. 项目地址: https://gitcode.com/gh_mirrors/ma/mainframer Mainframer是一款高效的远程…...

Hello-Agents 第二部分-第九章总结:上下文工程

作者&#xff1a;逆境不可逃 技术永无止境 希望我的内容可以帮助到你&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 大家吼 ! 我是 逆境不可逃 今天给大家带来文章《Hello-Agents 第二部分-第九章总结&#xff1a;上下文工程》. Hello-Agents 官方地址:data…...