c++里面的知识学习:指针与引用

1、指针的定义与概念

在C++中,指针是一种用于存储变量内存地址的特殊数据类型。它们允许我们直接访问和操作存储在内存中的数据。

指针的定义格式为:数据类型* 指针变量名; 其中,数据类型表示指针所指向的目标变量的数据类型,* 表示该变量是一个指针变量,指针变量名是程序员自定义的变量名。

例如,下面是一个指向整数的指针的定义:

int* ptr;

这定义了一个名为ptr的指针变量,用于存储整数类型变量的内存地址。

要注意的是,指针变量需要初始化为有效的内存地址,否则可能导致不可预测的行为。可以使用取地址运算符&来获取变量的地址,并将其赋值给指针变量。例如:

int num = 10;
int* ptr = #

上面的代码将整数变量num的地址赋给了指针变量ptr。

通过指针变量,我们可以访问和操作指针所指向的变量。可以使用解引用运算符*来获取指针所指向的变量的值。例如:

cpp 复制代码
int num = 10;
int* ptr = #

cout << "Value of num: " << *ptr << endl;  // 输出:Value of num: 10

*ptr = 20;  // 修改指针所指向的变量的值

cout << "Modified value of num: " << num << endl;  // 输出:Modified value of num: 20

在上面的示例中,使用*ptr来获取指针ptr所指向的变量num的值,并且通过*ptr = 20修改了指针所指向的变量的值。

**指针在C++中具有重要的作用,特别是在动态内存分配、数组访问和函数传递参数等方面。它们可以提供更灵活的内存管理和数据操作方式。**但需要小心使用指针,以避免出现悬空指针、内存泄漏和段错误等问题。

2、为什么c++中普通的变量不能存地址,而只有指针变量才可以存地址。

**在C++中,普通的变量存储的是具体的数据值,而不是地址。**普通变量在内存中占据一段连续的存储空间,存储着特定类型的数据。 例如,int类型的变量存储的是一个整数值,float类型的变量存储的是一个浮点数值。

**指针变量是一种特殊的变量,它存储的是内存地址。****指针变量可以通过指针操作符*来访问所指向的内存地址处存储的值。**例如,int* ptr是一个指向int类型数据的指针变量,它存储的是一个内存地址,可以通过*ptr来访问该地址处存储的整数值。

普通变量和指针变量之间的区别在于它们所存储的内容以及对应的操作方式。**普通变量直接存储具体的数据值,而指针变量存储的是地址,**在使用指针变量时需要通过指针操作符*来间接访问底层存储的值。

如果你想在普通变量中存储地址,可以使用指针类型来实现。通过定义指针变量并将其初始化为某个地址,然后将该指针变量赋值给普通变量,就可以在普通变量中存储地址。但是需要注意,这种情况下普通变量仍然存储的是指针变量的值(即地址),而不是直接存储地址本身。说白了就是普通变量存数据,指针变量存地址,当你需要存地址的值时,那就定义一个指针变量来装就行。

3、引用的概念与应用。

**在C++中,引用是一种对已存在的变量进行别名定义的方式。通过引用,你可以用一个变量名来引用另一个变量,使得两个变量指向同一块内存空间。**引用提供了一种简洁而直观的方式来操作变量,同时也可以避免复制大对象的开销。

引用的基本语法如下:

type& refName = originalVariable;

其中,type 是原始变量的类型,refName 是引用的名称,originalVariable 是原始变量。

以下是关于引用的一些重要特点和使用方法:

  1. 引用必须在声明时初始化,并且不能重新绑定到其他变量。
cpp 复制代码
int x = 10;
int& ref = x; // 引用ref绑定到变量x

2.引用是原变量的别名,对引用的修改会直接反映到原变量上。

cpp 复制代码
ref = 20; // 修改引用,x 的值也会变为 20

3.引用可以作为函数参数,可以通过引用实现函数内对原变量的修改。

cpp 复制代码
void increment(int& num) {
    num++;
}

int x = 10;
increment(x); // x 的值变为 11

4.引用可以作为函数的返回值,可以返回原变量的引用。

cpp 复制代码
int& getLarger(int& a, int& b) {
    return (a > b) ? a : b;
}

int x = 10, y = 20;
int& larger = getLarger(x, y); // 返回 x 和 y 中较大值的引用

总结:引用是C++中重要且强大的特性,它使得代码更加简洁、易读,并且可以有效地避免不必要的内存拷贝开销。**然而,需要注意的是,引用有一些限制和注意事项,比如不能将引用绑定到临时对象,以及需要避免悬空引用等。**在使用引用时,建议仔细阅读相关文档并理解其行为和规则。

引用其实很少用,但是他的定义格式和作用还是得了解,在一些特定的地方他会发挥巨大的作用。

相关推荐
布莱克6053 小时前
C/C++ 中变量的声明与定义:区别、联系与常见误区
c语言·开发语言·c++·声明·定义
LabVIEW开发3 小时前
LabVIEW 局部变量为何引发竞争条件?四种同步机制
开发语言·labview
benchmark_cc4 小时前
A 股、港股、美股如何建立统一的标的主数据格式?
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
前进的李工5 小时前
Agent 学习笔记 05:系统提示词应该怎么写
笔记·学习·prompt·agent·个人开发·few-shot·ai应用开发
Zenova EdgeOS5 小时前
Go 工业边缘错误处理实战:用 errors 构建可追溯错误链
开发语言·数据库·golang
取名真是5 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
FRing035 小时前
vue2干货总结3(computed计算属性、watch监听器)
开发语言·前端·vue.js·vue2
正在走向自律6 小时前
【3/5】人工智能训练师 三级/高级工 考证学习方向:从“独立执行”到“设计、归因与全链条负责”
人工智能·学习·人工智能训练师·注方案设计·数据质控负责人·模型评测与调优辅助·ai训练项目交付
Fatbobman(东坡肘子)6 小时前
快速消失的硬盘容量 -- 肘子的 Swift 周报 #160
开发语言·人工智能·redis·ios·swiftui·iphone·swift
揽星河..6 小时前
【C语言】底层程序设计
c语言·开发语言