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

C++ 解引用

获取内存地址和值

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

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

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

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

修改指针值

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

1string food = "Pizza"; 2string* ptr = &food; 3 4// 输出 food 的值(Pizza) 5cout << food << "\n"; 6 7// 输出 food 的内存地址(0x6dfed4) 8cout << &food << "\n"; 9 10// 访问 food 的内存地址并输出其值(Pizza) 11cout << *ptr << "\n"; 12 13// 改变指针的值 14*ptr = "Hamburger"; 15 16// 输出指针的新值(Hamburger) 17cout << *ptr << "\n"; 18 19// 输出 food 变量的新值(Hamburger) 20cout << food << "\n";

解引用指针的注意事项

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

总结

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

C++ 函数

函数概述

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

创建函数

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

1returnType functionName(parameterList) { 2 // 函数体 3}

其中:

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

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

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

函数调用

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

1printMessage("Hello, world!");

函数参数

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

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

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

函数返回值

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

1int square(int number) { 2 return number * number; 3}

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

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

函数声明和定义

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

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

1// 函数声明 2void printMessage(string message); 3int square(int number); 4 5// ... 6 7// 函数定义 8void printMessage(string message) { 9 cout << message << endl; 10} 11 12int square(int number) { 13 return number * number; 14}

函数重载

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

1void printMessage(string message) { 2 cout << message << endl; 3} 4 5void printMessage(int number) { 6 cout << number << endl; 7}

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

函数的作用域

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

总结

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

最后

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

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

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

点赞
收藏

评论区

加载中...

相关推荐

仔细看看,会有收获。js深浅拷贝

好好理解深浅拷贝和赋值(针对引用类型)赋值:两个对象指向同一内存地址。结果,无论是修改基本类型还是引用类型,两个对象的值都会改变。浅拷贝:两个对象指向不同的内存地址,但是他们中的引用类型数据指向同一内存地址。结果,修改引用类型,两个对象的值都会改变;修改基本类型,互不影响。深拷贝:两个对象指向不同的内存地址,他们中的引用类型也指向不同的内存地址。结果,均互不

[Dart]Dart语言之旅<二>:变量

变量以下是创建变量并为其分配值的示例:varname'Bob';变量是引用。名为name的变量包含对值为“Bob”的String类型的对象的引用。默认值未初始化的变量的初始值为null。即使是数字类型的变量,初始值也为null,因为数字也是对象。intlineCount;assert(lineCountnull)

Go语言中new()和make()的区别

1.Go语言中的值类型和引用类型值类型:int,float,bool,string,struct和数组(数组要特别注意,别搞混了)变量直接存储值,分配栈区的内存空间,这些变量所占据的空间在函数被调用完后会自动释放。引用类型:slice,map,chan和值类型对应的指针变量存储的是一个地址(或者理解为指针),指针指向内存中真

C++11之右值引用(三):使用C++11编写string类以及“异常安全”的=运算符

前面两节,说明了右值引用和它的作用。下面通过一个string类的编写,来说明右值引用的使用。相对于C98,主要是多了移动构造函数和移动赋值运算符。先给出一个简要的声明:classString{public:String();String(constchars);

Golang教程:指针

什么是指针指针是存储一个变量的内存地址的变量。  !(https://oscimg.oschina.net/oscnet/70c3337580dba5f227a4b71b2f73d6ba527.png)在上图中,变量 b 的值是 156,存储在地址为 0x1040a124 的内存中。变量 a 存储了变量 b 的

C++ 引用和指针:内存地址、创建方法及应用解析

C引用和指针创建引用引用变量是对现有变量的“别名”,它是使用&运算符创建的:cstringfood"Pizza";//食物变量string&mealfood;//对food的引用现在,我们可以使用变量名food或引用名meal来引用食物变量:c