基于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 小时前
基于docker安装MySQL(openEuler系统)
linux·mysql·docker·容器
小淮AI1 小时前
从“刷题”到“追问”:AI课堂正在重塑哪些学习旧习惯?
人工智能·学习
论迹复利2 小时前
FreeRTOS 在 RISC-V 上是如何“点火“的 —— 从 main() 到第一个任务的完整链路
java·开发语言·risc-v
张宇Joaquin2 小时前
鲲鹏统一并行加速库KUPL--众核并行能力介绍
java·开发语言·网络
736c2 小时前
C语言-数组 07
c语言·开发语言
shehuiyuelaiyuehao2 小时前
算法31,前缀和,可被k整除的子数组
数据结构·python·算法
wixzjsh2 小时前
TCP通信与HTTP协议学习笔记:粘包、三次握手、四次挥手与C/S、B/S模型
学习·tcp/ip·http
ZhiMuZhiLing2 小时前
拓客软件学习成本实测方法论:从注册到出第一批名单要多久
学习·流量运营·用户运营
一直C2 小时前
Linux网络编程|HTTP协议详解(报文、请求方法、状态码)
linux·http·wireshark·vim·visual studio
宸津-代码粉碎机3 小时前
AI攻防战升级!基于Spring AI构建Java应用自动免疫安全体系
java·大数据·开发语言·人工智能·python·安全·spring