基于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个字节大小;与数据类型无关。空指针可以通过编译,也可能不通过编译,但是不能运行会发生段错误。

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

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

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

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

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

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

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

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

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

相关推荐
暗影天帝13 分钟前
BPI-R3 Mini 刷 Yuzhii DHCPD U-Boot 教程
linux
小赖同学啊26 分钟前
智能连接器集群化高可用生产方案
linux·运维·人工智能
Cinema KI34 分钟前
Linux第一个系统程序-进度条
linux·服务器
千寻girling37 分钟前
记录第一次学习 Docker
学习·docker·容器
AC赳赳老秦42 分钟前
OpenClaw+Power Apps 实战:自动生成 Power Apps 应用、连接 Excel 数据源
大数据·开发语言·python·serverless·excel·deepseek·openclaw
提笔了无痕44 分钟前
如何用Go实现整套RAG流程
开发语言·后端·golang
(Charon)1 小时前
【C++ 面试高频基础:指针、引用、const、static、new/delete 总结】
java·开发语言
一只齐刘海的猫1 小时前
【Leetcode】找到字符串中所有字母异位词
算法·leetcode·职场和发展
海清河晏1111 小时前
数据结构 | 八大排序
数据结构·算法·排序算法
Kobebryant-Manba1 小时前
学习RNN(简洁实现)
人工智能·rnn·学习