基于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语言学习记录指针部分。

相关推荐
世人万千丶1 小时前
鸿蒙Flutter Flex多子组件权重分配
学习·flutter·华为·harmonyos·鸿蒙
GuWenyue1 小时前
传统Agent工具两大痛点!300行代码落地MCP跨语言工具,彻底解耦LLM与工具
前端·人工智能·算法
优橙教育1 小时前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g
同勉共进2 小时前
记一例 vibe coding + gcc bug 导致的线程池死锁问题
c++·线程池·gcc·死锁·vibe coding
我叫洋洋3 小时前
C ++ [ hello world ]
c语言·c++·算法
SeaTunnel3 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
碎光拾影3 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
一叶龙洲4 小时前
wslg打开Ubuntu24.04默认打开图形界面
linux·服务器·数据库·ubuntu
圣光SG4 小时前
Servlet学习笔记
笔记·学习·servlet
奋发向前wcx4 小时前
y1,y2总复习笔记5 2026.7.19
数据结构·笔记·算法