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

相关推荐
一隅论数智2 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
倒头就睡的小比特2 天前
算法竞赛C++常用的STL
c++·算法
weilx12342 天前
C++笔记-文件IO-<fcntl.h>
c++
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
未济2 天前
linux 配置环境变量
linux
傲世仙尊2 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
XiHongShi20162 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
爱吃苹果的日记本2 天前
离散数学第六课
学习·离散数学
伞伞悦读2 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python