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

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

相关推荐
郭涤生5 小时前
布隆过滤器
c++
喵了meme5 小时前
C语言实战4
c语言·开发语言
码界奇点5 小时前
Python从0到100一站式学习路线图与实战指南
开发语言·python·学习·青少年编程·贴图
智者知已应修善业5 小时前
【求中位数】2024-1-23
c语言·c++·经验分享·笔记·算法
9ilk5 小时前
【C++】--- 特殊类设计
开发语言·c++·后端
sali-tec6 小时前
C# 基于halcon的视觉工作流-章68 深度学习-对象检测
开发语言·算法·计算机视觉·重构·c#
YJlio7 小时前
Active Directory 工具学习笔记(10.8):AdInsight——保存与导出(证据留存、共享与二次分析)
数据库·笔记·学习
生骨大头菜7 小时前
使用python实现相似图片搜索功能,并接入springcloud
开发语言·python·spring cloud·微服务
绝不收费—免费看不了了联系我7 小时前
Fastapi的单进程响应问题 和 解决方法
开发语言·后端·python·fastapi
消失的旧时光-19438 小时前
深入理解 Java 线程池(二):ThreadPoolExecutor 执行流程 + 运行状态 + ctl 原理全解析
java·开发语言