有关指针的学习笔记

指针简介

指针,顾名思义

就是只想某一个地方

而这个地方就是某个数据存放的地址

如图,我们构造了一个整形变量a并赋值为一

我们在想构造类型的前缀后加   *

便表示是该类型的指针

而我们构造的指针q

便指向了整型变量a的地址

指针有很多类型

比如这个就是一个字符串指针


而这是一个8字节的整形指针

但万变不离其宗

他们的作用就是指向一个由16个16进制的数字所构成的地址

只是他们指向的地址所存放的数据类型不同

所以在定义的时候

要用指向的地址所存放的数据类型来定义

指针的实质

前面我们提到

指针指向的是一个由16个16进制的数字所构成的地址

而我们可以用%p来查看

在这个例子中

我们将指针指向字符串数组的首元素

而在默认台的输出时,我们可以看到

两者是完全一致的

多维数组指针的探索(本为章只以int类进行探讨)

如图,我们可以发现,str,str[0],str[0][0]所指向的地址是一致的

所以我认为对为数组的理解可以为多个嵌套数组

str是数组str[0]的名称

而str[0]又是str[0][0]的名称

str[0][0][0]又是str[0][0]

由于我们知道数组的名称就是指向数组首元素的地址

所以在嵌套下,他们都指向了同一个地址

那就是&str[0][0][0]

要注意的是

此时的是str[0][0][0]相当于一个指针指向存放在字符常量区的数据,

是类似二级指针的用法

而我们在前面加上一个&

就可以得到存放这个指针的地址

我们对多为数组的存储进行探索

由于int的存储为4字节

所以他们的空间是挨在一起的

在空间上如图

在同列上是指向同一个空间

行上没相隔一个空为4个字节

二级指针

二级指针就是指针又指向一个指针

如图

便是对二级指针的简单应用

我在这对六行输出做一下简单解释

1.定义一个整形变量为1,而我们用&获得了变量的地址

2.我们在第二行定义了一个指针strr指向了str,而我们的第二行输出为strr所保存的地址

3.我们在第三行定义了一个指针strrr指向了先前我们定义的指针strr,而我们的第三行输出为strr指针的地址

4.输出str的值

5.运用*进行间接引用,输出strr所指向的地址所存放的值

6.先运用*(第二个)进行间接引用,输出strrr所指向的地址所保存的值,而strrr指向的strr正好是一个地址

所以我们再用*(第一个)在进行间接引用,指向strr所指向的地址所保存的值

所以我们最后的到的为

1.str的地址

2.str的地址

3.str的地址

4.str的值

5.str的值

6.str的值

指针的几个注意事项

1.比如说我们定义指针q和p

我们就可以用if(q==0)

来判断指针是否为空指针(指向NULL)

也可以用if(p>q)

判断p和q储存空间关系

2野指针

比如在我们使用malloc开辟空间并free后

忘记将指针指向NULL

就会导致指针指向为开辟的空间

也就是我们常说的野指针

我们要记得即使将无用的指针指向NULL

谢谢大家观看

点一个免费的赞和关注吧

欢迎大家评论哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值