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,关注后即可获取最新文章推送

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

C++ 解引用与函数基础:内存地址、调用方法及声明的更多相关文章

  1. JavaScript函数的4种调用方法详解

    在JavaScript中,函数是一等公民,函数在JavaScript中是一个数据类型,而非像C#或其他描述性语言那样仅仅作为一个模块来使用.函数有四种调用模式,分别是:函数调用形式.方法调用形式.构造 ...

  2. 优雅的重载toString方法,打印对象内容而不是打印内存地址的方法

    如果直接在日志或者System.out.println中打印java对象,会打印这个对象的内存地址,而不是具体内容. 为了便于调试,一般的做法有2种: 1.重写toStrong方法 2.将对象传入JS ...

  3. php函数的种类与调用方法大揭密

    PHP中的函数看上去很简单,实际上功能非常强大,我这里按函数名称是否固定,可以分为以下三大类: 一.名称固定的函数: 这类函数,也叫:常规函数,直接用关键字function来创建,也是大家最熟悉的类型 ...

  4. JavaScript 函数的4种调用方法

    JavaScript 函数有 4 种调用方式. 每种方式的不同方式在于 this 的初始化. 作为一个函数调用 function myFunction(a, b) { return a * b; } ...

  5. 利用mysql的inet_aton()和inet_ntoa()函数存储IP地址的方法

    原文:https://www.jb51.net/article/29962.htm 当前很多应用都适用字符串char(15)来存储IP地址(占用16个字节),利用inet_aton()和inet_nt ...

  6. JS函数的定义与调用方法

    JS函数调用的四种方法:方法调用模式,函数调用模式,构造器调用模式,apply,call调用模式 1.方法调用模式:先定义一个对象,然后在对象的属性中定义方法,通过myobject.property来 ...

  7. 【转】JS函数的定义与调用方法

    JS函数调用的四种方法:方法调用模式,函数调用模式,构造器调用模式,apply,call调用模式 1.方法调用模式:先定义一个对象,然后在对象的属性中定义方法,通过myobject.property来 ...

  8. WebApiClient.AOT.dll 调用api地址 -> 调用方法

    优点:简化api调用过程,WebApiClient.AOT.dll中的IHttpApi接口 缺点:只适用于内部服务之间的调用(没有验证过程) 1.继承IHttpAPi接口 public interfa ...

  9. Java基础 throws 提示调用方法时要注意处理相关异常

        JDK :OpenJDK-11      OS :CentOS 7.6.1810      IDE :Eclipse 2019‑03 typesetting :Markdown   code ...

  10. python中的函数对象的内存地址是多少

    今天和同学讨论一个问题,发现了函数的内存地址和我想象的不一样. 我以为同一个函数,假如给的参数不一样,那么这两个函数的id就不一样. 然后经过实验,发现python为了便于管理函数,所有的函数都放在同 ...

随机推荐

  1. 6、mysql的SQL优化

    1. 大批量插入数据 1) 主键顺序插入 因为InnoDB类型的表是按照主键的顺序保存的,所以将导入的数据按照主键的顺序排列,可以有效的提高导入数据的效率.如果InnoDB表没有主键,那么系统会自动默 ...

  2. Shopee虾皮api接口 搜索商品、评价信息 python数据采集

    iDataRiver平台 https://www.idatariver.com/zh-cn/ 提供开箱即用的Shopee电商数据采集API,供用户按需调用. 接口使用详情请参考Shopee接口文档 接 ...

  3. 使用go语言开发自动化API测试工具

    前言 上一篇文章说到我还开发了一个独立的自动测试工具,可以根据 OpenAPI 的文档来测试,并且在测试完成后输出测试报告,报告内容包括每个接口是否测试通过和响应时间等. 这个工具我使用了 go 语言 ...

  4. Java中枚举配合switch语句用法-2022新项目

    一.业务场景 项目开发中经常会遇到多条件判断的情况,如果判断条件少的话使用if/elseif/else还比较好处理,如果判断条件多的话,则在使用这种语句就不太合适. 如果是自定义的一些内容,比如不同的 ...

  5. Vue前端项目架构梳理

    撰写日期:2020-07-23 撰稿人:彭成刚 转载需经本人同意. Vue前端项目架构梳理 后期可以将TypeScript加入到项目来,对参数的数据类型进行更严格的校验. 现在主流就 Vue 和 Re ...

  6. thinkphp phpstorm xdebug 环境配置

    php5.6 环境配置 phpStudy 开启 Apache 网站 的php版本选择7的 (7的可能自己需要装一下) 获取xdebug前的 检查准备 打开 http://localhost:8033/ ...

  7. 回顾redis底层数据结构

    参考,欢迎点击原文:https://blog.csdn.net/qq_38286618/article/details/102530020 https://www.cnblogs.com/jaycek ...

  8. 性能优化:编译器优化选项 -O2/-O3 究竟有多强大?

    之前的"性能优化的一般策略及方法"一文中介绍了多种性能优化的方法.根据以往的项目经验,开启编译器优化选项可能是立竿见影.成本最低.效果最好的方式了. 这么说可能还不够直观,举个真实 ...

  9. Spring Boot学习日记1

    今天了解了springboot是什么,起源和历史 Spring是一个开源框架,2003 年兴起的一个轻量级的Java 开发框架,作者:Rod Johnson . Spring是为了解决企业级应用开发的 ...

  10. 工作中最常见的6种OOM问题

    前言 最近我写的几篇线上问题相关的文章:<糟糕,CPU100%了><如何防止被恶意刷接口><我调用第三方接口遇到的13大坑>发表之后,在全网广受好评. 今天接着线上 ...