C++ 解引用与函数基础:内存地址、调用方法及声明

C++ 解引用

获取内存地址和值

在上一页的示例中,我们使用了指针变量来获取变量的内存地址(与引用运算符 & 一起使用)。但是,你也可以使用指针来获取变量的值,这可以通过使用 * 运算符(解引用运算符)来实现:

string food = "Pizza"; // 变量声明
string* ptr = &food; // 指针声明// 引用:使用指针输出 food 的内存地址(0x6dfed4)
cout << ptr << "\n";// 解引用:使用指针输出 food 的值(Pizza)
cout << *ptr << "\n";

需要注意的是,符号 * 在这里可能会让人感到困惑,因为它在我们的代码中有两种不同的作用:

  • 在声明中使用时(string* ptr),它创建一个指针变量。
  • 在非声明中使用时,它作为解引用运算符。

修改指针值

你可以改变指针的值。但要注意,这也会改变原始变量的值:

string food = "Pizza";
string* ptr = &food;// 输出 food 的值(Pizza)
cout << food << "\n";// 输出 food 的内存地址(0x6dfed4)
cout << &food << "\n";// 访问 food 的内存地址并输出其值(Pizza)
cout << *ptr << "\n";// 改变指针的值
*ptr = "Hamburger";// 输出指针的新值(Hamburger)
cout << *ptr << "\n";// 输出 food 变量的新值(Hamburger)
cout << food << "\n";

解引用指针的注意事项

  • 解引用指针时,要确保指针指向有效的内存地址,否则会导致程序崩溃。
  • 不要解引用空指针,这会导致程序崩溃。
  • 修改指针的值可能会导致意外的结果,应谨慎操作。

总结

解引用是 C++ 中一个重要的概念,它允许你获取指针指向的变量的值或内存地址。在使用解引用运算符时,要遵循一些注意事项,以避免程序崩溃或意外结果。

C++ 函数

函数概述

函数是一组用于执行特定任务的封装代码块。它们可以提高代码的可重用性、可读性和可维护性。

创建函数

在 C++ 中,创建函数需要遵循以下语法:

returnType functionName(parameterList) {// 函数体
}

其中:

  • returnType:函数的返回值类型,可以是 void(无返回值)或其他数据类型。
  • functionName:函数名称,由字母、数字和下划线组成,但不能以数字开头。
  • parameterList:函数参数列表,参数之间用逗号分隔,每个参数由数据类型和参数名组成。
  • 函数体:函数要执行的代码,由花括号括起来。

例如,以下代码创建了一个名为 printMessage 的函数,该函数接收一个字符串参数并将其打印到控制台:

void printMessage(string message) {cout << message << endl;
}

函数调用

要调用函数,只需在代码中写下函数名及其参数值,例如:

printMessage("Hello, world!");

函数参数

函数参数可以是输入参数、输出参数或输入输出参数。

  • 输入参数:函数从调用者接收数据。
  • 输出参数:函数将数据返回给调用者。
  • 输入输出参数:函数既可以接收数据又可以返回数据。

在 C++ 中,函数参数默认是输入参数。要声明输出参数或输入输出参数,需要使用引用或指针。

函数返回值

函数可以返回一个值给调用者。返回值类型写在函数声明的括号前面,例如:

int square(int number) {return number * number;
}

该函数接收一个整数参数 number,并返回其平方值。要调用该函数并获取返回值,可以使用以下代码:

int result = square(5);
cout << result << endl; // 输出 25

函数声明和定义

函数声明告诉编译器函数的名称、返回值类型和参数列表,而函数定义提供了函数要执行的代码。

函数声明通常放在程序的开头,而函数定义放在后面。例如:

// 函数声明
void printMessage(string message);
int square(int number);// ...// 函数定义
void printMessage(string message) {cout << message << endl;
}int square(int number) {return number * number;
}

函数重载

函数重载是指允许使用相同名称但不同参数列表的多个函数。例如:

void printMessage(string message) {cout << message << endl;
}void printMessage(int number) {cout << number << endl;
}

在调用这些函数时,需要根据实际参数类型选择正确的函数。

函数的作用域

函数的作用域是指函数内的变量和函数名在程序中可见的范围。函数内的变量和函数名只在该函数内可见,在其他函数中不可见。

总结

函数是 C++ 中重要的编程概念,它们可以提高代码的可重用性、可读性和可维护性。通过理解函数的声明、定义、调用和参数传递等概念,您可以编写更简洁、更有效的 C++ 程序。

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎点赞、收藏、关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/811508.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Latex中todonotes超出页面范围及其他参数说明

解决方案为 \usepackage{todonotes} \setlength{\marginparwidth}{2.25cm} % 设置边注宽度&#xff0c;否则todo会超出页面范围在使用todo时&#xff0c;还可以进一步设置行距和字体大小。 {\linespread{1.0} \todo[size\small]{这是一个todo}} 在 LaTeX 中&#xff0c;有一系…

库、框架、脚手架和IDE一文讲明白

在区分上面几个问题前&#xff0c;咱们先看看几个疑问。 一、常见问题汇总 js css直接复制到服务器 然后引用不就行了么&#xff1f; 为什么还需要安装&#xff1f; 引入js不就是引入了框架了吗&#xff1f;框架就是js&#xff1f; 脚手架和框架都有架&#xff0c;是不是一…

前端js基础知识(八股文大全)

一、js的数据类型 值类型(基本类型)&#xff1a;数字(Number)、字符串&#xff08;String&#xff09;、布尔(Boolean)、对空&#xff08;Null&#xff09;、未定义&#xff08;Undefined&#xff09;、Symbol,大数值类型(BigInt) 引用数据类型&#xff1a;对象(Object)、数组…

Qt | 对象树与生命期(对象的创建、销毁、擦查找)

一、组合模式与对象树 1、组合模式指的是把类的对象组织成树形结构,这种树形结构也称为对象树,Qt 使用对象树来管理 QObject 及其子类的对象。注意:这里是指的类的对象而不是类。把类组织成树形结构只需使用简单的继承机制便可实现。 2、使用组合模式的主要作用是可以通过…

代码随想录算法训练营第三十七天| 738.单调递增的数字,968.监控二叉树,总结

题目与题解 参考资料&#xff1a;贪心总结 738.单调递增的数字 题目链接&#xff1a;738.单调递增的数字 代码随想录题解&#xff1a;738.单调递增的数字 视频讲解&#xff1a;贪心算法&#xff0c;思路不难想&#xff0c;但代码不好写&#xff01;LeetCode:738.单调自增的数字…

Docker安装Oracle数据库 【转载】

Docker安装Oracle数据 alter user system identified by abc; --修改system用户的密码

JVM调优工具详解-jps、jmap、jstat、jstack

jps 用于查看相关java线程的相关信息 选项作用-q仅显示进程 ID&#xff0c;而不显示类名或 JAR 文件的路径-m显示传递给主类的参数-l显示完整的主类名或 JAR 文件的路径-v显示传递给 Java 虚拟机的参数 jmap 此命令用来查看内存信息&#xff0c;实例个数以及占内存大小 jmap…

IT技术人员必看:什么是业务?何为业务架构?

在技术型的组织里&#xff0c;好多Leader能脱颖而出&#xff0c;除了得有扎实的技术底子&#xff0c;对业务的熟悉和理解也相当重要。尤其在像阿里那样的公司&#xff0c;P7以上的技术人员要想升职&#xff0c;深度理解业务就特别关键。而且&#xff0c;级别越高&#xff0c;对…

Vue3+Ant Design表格排序

最近在公司做有关报表的项目时&#xff0c;遇到最多的问题-表格排序&#xff0c;刚开始看到UI设计图的时候&#xff0c;还有些纳闷这个排序如何做&#xff0c;其实实际上并没有想象中的那么难&#xff0c;如果说单纯的排序的话ant design这个组件里的表格有自带的排序和筛选功能…

作业第二次

一、正向解析 1、准备工作 [rootserver ~]# setenforce 0 [rootserver ~]# systemctl stop firewalld 2、服务端、客户端均安装软件 [rootserver ~]# yum install bind -y [rootnode1 ~]# yum install bind -y 3、服务端、客户端设置静态ip [rootserver ~]# nmcli c modify …

ocr截图识别的软件有吗?分享6款!

随着科技的发展&#xff0c;我们越来越多地依赖于数字技术和智能工具来处理日常任务。OCR技术就是其中的佼佼者&#xff0c;它能够将图片中的文字快速、准确地转换成可编辑的文本格式。OCR截图识别软件就是这一技术的典型应用&#xff0c;它们能够帮助我们轻松地从截图中提取文…

772. 只出现一次的字符

给你一个只包含小写字母的字符串。 请你判断是否存在只在字符串中出现过一次的字符。 如果存在&#xff0c;则输出满足条件的字符中位置最靠前的那个。 如果没有&#xff0c;输出 no。 输入格式 共一行&#xff0c;包含一个由小写字母构成的字符串。 数据保证字符串的长度…

供应RTC5606H 芯片现货

长期供应各品牌芯片现货&#xff1a; NVP2443I NVP6324 RTC5606H NZ3802-A IRF100B201 IMX290LQR-G STM32F103C8T6TR STM32F103C8T6TR STM32F103CBT7TR TPS3823-33DBVR IMX326 TPS3823-33DBVR LPC55S69**D100 OCP2184QAD DT3001S23E1-30 EMP8734-33…

阿里云服务器带宽价格全解析,附报价单

阿里云服务器公网带宽怎么收费&#xff1f;北京地域服务器按固定带宽计费一个月23元/M&#xff0c;按使用流量计费0.8元/GB&#xff0c;云服务器地域不同实际带宽价格也不同&#xff0c;阿里云服务器网aliyunfuwuqi.com分享不同带宽计费模式下带宽收费价格表&#xff1a; 公网…

【C语言】双向链表详解

文章目录 关于双向链表双向链表的初始化双向链表的打印双向链表方法调用 - 尾删为例双向链表的查找 - 指定位置之后插入为例双向链表结束 - 链表的销毁小结及整体代码实现 关于双向链表 首先链表有8种基本分法 其中在笔者之前文章种详细介绍的 单链表 是不带头单项不循环链表…

sql | 建表语句中default 关键字的使用 | datetime vs timestamp vs bigint

backgroud: 时间戳&#xff0c;存表&#xff0c;好像一般存的是 datime\timestamp\bigint&#xff0c;那有啥区别呢&#xff1f; 搜了一下&#xff0c;貌似&#xff1a; bigint&#xff1a;bigint是一个64位的整数类型&#xff0c;可以用来存储时间戳。但是&#xff0c;它只是…

C++学习知识

C知识小菜单&#xff1a; 备赛蓝桥杯过程中的一些小知识积累&#xff0c;持续更新中&#xff01; 文章目录 C知识小菜单&#xff1a;1.小数取整&#xff1a;2.小数点后保留几位&#xff1a;3.数字占几位字符&#xff1a;4. 求x 的 y 次幂&#xff08;次方&#xff09;5. 求平方…

STM32完成软件I2C通讯

今天的重点是利用STM32的软件方案和MPU60506轴姿态传感器建立通讯&#xff0c;今天只完成了简单的发送地址和接收应答的部分&#xff0c;特此记录一下过程&#xff0c;以后忘记可以随时翻出来看看。 先介绍最基本的I2C通讯的最基本的6个时序&#xff1a; 一&#xff1a;起始条…

TCP/IP协议—UDP

TCP/IP协议—UDP UDP协议UDP通信特点 UDP头部报文UDP检验 UDP协议 用户数据传输协议 (UDP&#xff0c;User Datagram Protocol) 是一种无连接的协议&#xff0c;提供了简单的数据传输服务&#xff0c;不保证数据的顺序以及完整性。应用层很多通信协议都基于UDP进行传输&#x…

算法-二分

算法-二分 时间复杂度&#xff08;logn&#xff09; 当问题的答案具有单调性时&#xff0c;就可以通过二分把求解转换为判定。 1.整数二分 bool check(int x){...} //检查x是否满足某种性质int bsearch_1(int l,int r) {int mid(lr)>>1;int ansr;if(check(mid)) an…