基于Linux的C++学习——指针

一、Linux应用小技巧

除了用vim打开一些文件以外,还可以用cat来直接打印出文件的内容,还可以通过cat来获取行数

cat 文件名.后缀名 |wc -l

除了cat那还有head,头部,顾名思义,可以指定打印前几行,如下所示,打印main.cpp中的前5行

head -5 main.cpp

与head相对应的就是tail,尾巴,顾名思义,可以指定打印后几行,如下所示,打印main,cpp中的后5行内容

tail -5 main.cpp

二、指针

**指针的作用:可以通过指针间接访问内存。**内存编号是从0开始记录的,一般用十六进制数字表示,可以利用指针变量保存地址。

下面举一个实际的例子来说明指针,假设小明家住十楼,小明在吃饭,就是住十楼的小明在吃饭,这段描述中小明 => 变量,十楼 => 变量地址,&小明 = 十楼(得到地址),*十楼 = 小明(地址对应的元素)

下面来看指针最简单的一个代码,对指针的使用

使用指针,可以通过解引用的方式来找到指针指向的内存。指针前加*代表解引用,找到指针指向的内存中的数据。最后一种方式可以认为p是一个数组取第零个元素就是a的值。

指针所占内存的大小:在32位操作系统下,指针是占4个字节大小;在64位操作系统下,指针是占8个字节大小;与数据类型无关。空指针可以通过编译,也可能不通过编译,但是不能运行会发生段错误。

如下图所示,开辟一段空间,p[0]=5相当于*(p + 0)=5,

一旦分配空间之后,一定要记得使用后进行释放,否则随着程序的堆叠,可能导致内存泄露

发现清除之后的地址于之前的是一样的,那么可以再来验证一下对应的值,发现对应的值无法解释,应该就是指向了一个不确定的位置

在这种情况下,在释放所分配的空间后,再将指针配置为空指针,以防再次释放,这是不被允许的

为了安全起见,最好释放后将指针设置为空。

下面再来深化一下对*(p + i) = p[i],可以这样理解,p是一个地址,i是一个偏移量,*是取对应偏移后的地址对应的值,这与p[i]的结果一致。assert断言函数,若传入函数中的表达式为真则正常运行为假则退出。如下图所示,程序没有崩溃,说明断言函数内部的表达式是等价的。

不要使用delete来释放不是new分配的内存,不要使用delete释放同一个内存块两次,如果使用new[]为数组分配内存,则应使用delete[]来释放。如果使用new[]为一个实体分配内存,则应使用delete(没有方括号)来释放,对空指针应用delete是安全的。

下面再来深化一下对&的理解

其余指针相关内容可以查看C语言学习记录指针部分。

相关推荐
地平线开发者15 小时前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮15 小时前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者16 小时前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考16 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx19 小时前
CART决策树基本原理
算法·机器学习
Wect20 小时前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript
颜酱20 小时前
单调队列:滑动窗口极值问题的最优解(通用模板版)
javascript·后端·算法
肆忆_1 天前
# 用 5 个问题学懂 C++ 虚函数(入门级)
c++
chlk1231 天前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑1 天前
Ubuntu系统安装CodeX出现问题
linux·后端