指针,继续肝!!!为了我的粉丝和学习指针有疑惑的童鞋!

昨天刚发完指针那篇博客文章,我账号的访问量瞬间翻了三倍也有了几位粉丝,这让我获得了极大的正反馈。想着今天继续分享指针知识可能会受到更多童鞋的关注,同时也能让童鞋们受益,我的情绪发动机狠狠发动了,冲!!!

在昨天理解了指针是啥,为啥药学指针,指针能做啥事的基础上,今天我继续分享一些我学习之后的心得。我们都知道了指针的语法是:内置的数据类型 + *(星号)+变量名。就是说不同的内置数据类型就可以创建不同的指针咯,比如 int*,char*,double*,float*这些,但不知道童鞋们在学习指针的时候有没有这个疑问,就是既然指针是地址,那为什么我们不直接定义一种类型用来访问所有数据类型的数据呢?指针说到底也就只是一个地址而已,它与存储空间里存储的数据本质上没有啥关系。显然,这个疑问是被否定的,那为啥被否定呢?说到这里,我们就得联系数组和之前学过的每种内置数据类型所占字节的大小了。我们都知道 int类型占 4 个字节,char类型占 1 个字节,float类型占 4 个字节,double类型占 8 个字节。比如有两个数组int arr[5] 和 double arr1[5]他们分别在内存中申请了一段连续的存储空间,现在我们需要使用指针遍历这两个数组,若我们的疑问为true,那么在访问这两个数组的时候使用的是同一类型指针。但是数组int arr[5]相邻的两个元素之间相差 4 个字节,而数组double arr1[5]相邻两个元素之间是相差 8 个字节,这两个数组在分别访问完前一个元素之后,到下一个元素需要跳过字节数是不相同的。所以,童鞋此刻你应该是恍然大悟了吧,这就是为啥对不同数据类型创建对应类型指针的原因,为的就是准确无误的访问到对应数据类型的元素。从这我们也可以推出,不同类型的指针在访问对应类型的数组时每次跳过的字节数是不同的。

童鞋,到这里我还想问你一个问题,你觉得指针的大小是否与数据类型有关呢?指针的大小又是多少呢?理解上面我说的之后,我猜你的答案是:肯定和数据类型的大小绑在一起的。但是,你的答案还真就不对哈,为啥呢?这又要说到计算机CPU的三大总线中的地址总线了,童鞋们应该都知道计算机进行计算的数据都来自内存,而CPU恰恰是通过地址总线中的地址向内存寻找数据的,没错这里的地址和内存内的地址是相对应的,也就是和指针相对的。所以说指针的大小就是地址总线的大小。地址总线是一组线路的总称,它包含了很多条线,我们常见的计算机是32位或者64位的CPU,其中32和64代表的是寄存器的数量,而寄存器的作用之一就是寻址,寻址当然是通过地址总线来找啦,到此我想童鞋你应该是懂这其中的缘由了,若是32位的CPU,那么一个字节占8位,故指针大小为 4个字节;若是64位的CPU,那么指针大小为 8个字节。所以指针大小与数据类型根本没有关系,它只与CPU有多少个寄存器有关!! 以下是代码截图,童鞋们可以去试试。


int main()
{
	double a = 3.14;
	double* pro = &a;

	float b = 3.14f;
	float* pro1 = &b;
	printf("%zd\n", sizeof(pro));
	printf("%zd\n", sizeof(pro1));

	return 0;
}

​

最后分享 const 修饰指针在*左右的区别,const 翻译就是常量的,若在童鞋们学习指针的过程中遇到const,不用怕听我说完就可轻松拿捏它。先说const在 * 左侧 例 const int* pro = &num1; 这类指针const 修饰的就是 *pro 而 *pro 就是对指针变量pro指向的空间进行 解引用的操作,本质就是访问该空间内的数据,若童鞋们已经学到了这里,那么通过指针改变空间内的数据也是用 *pro 来实现对吧。所以说啊,const 对 *pro进行限制 使*pro 指向空间内的数据成为常量,目的就是不让*pro把存储的数据给改了,使它一直保持是这个数据,但是他并没有限制 指针变量 pro哦。而const 若在 *的右侧 int*const pro = &num2,那么const 就是限制了指针变量 pro,pro的作用就是可以指向对应数据类型的变量,限制pro 使它成为常量,目的就是让pro不再指向其他同类型的变量了,只能指向第一次指向的变量,但是这种情况没有限制*pro以及上面同样的情况下。 这样可以干啥,愿各位童鞋在我启发下独自去找到答案并理解它。

OK,今天就分享这些,我这只是我个人的观点,有些知识可能理解不到位,若童鞋们发现,请及时告知,先在此谢过了!其实粉丝啥的对我而言只是增加我写博客的动力罢了,我的初衷还是希望童鞋们能受益,当然啦,若点赞多的话,我会坚持每天发一篇博客的。

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值