指针简介
指针,顾名思义
就是只想某一个地方
而这个地方就是某个数据存放的地址
如图,我们构造了一个整形变量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
谢谢大家观看
点一个免费的赞和关注吧
欢迎大家评论哦
标签:指向,strr,笔记,学习,地址,str,我们,指针 From: https://blog.csdn.net/AD057708281024/article/details/139293318