从0开始学c语言-总结06-指针汇总与地址的理解

        实际上对于指针,总有人说听不太懂。但对于我来说,我更喜欢从数据类型的角度理解指针。而在汇总文章的时候,我发现自己写的指针篇幅真的不少,汇总难度有点大,我会尽力不太啰嗦。(而实际上,被汇总的文章虽然讲得详细,但是可阅读性很差,这点我自己承认,毕竟当初写博客只是为了梳理学习思路而已)注:不会解释结论是为什么,个别会演示结论效果,详细的结论效果都在被汇总的文章内。

目录

1·指针的简单理解

2·编译器中如何查看地址?  

3·如何快速写出指针类型

4·指针类型有什么用?以及指针规定

const修饰指针:

5·字符指针与字符串

6·一些学习结论

7·如何规避野指针?

8·汇总链接

 9·指针练习

10·指针传参


1·指针的简单理解

        注:这段话是我自己学习指针的理解。                        

        其实指针(变量)是一种数据类型,和int、long、char之类的是一样的作用,用来给数据分类储存的。只不过int、long等是用来储存整型数据,folat、double用来储存浮点数据,而指针是用来储存地址数据的。(所以,存放在指针中的值都被当成地址处理。)

        而实际上地址又是什么?我们总说地址是编号(且是十六进制形式的编号,例如:0x00000000),那既然是数字编号应该是int类型的整型数据,为什么地址还要分出来指针类型来储存?

        所以我把地址理解为,向内存申请住宿空间时候的证书(或者说是钥匙)。而这个证书上写着自己想要的证书编号(就是起始房间门牌号,也就是起始地址)、房间大小以及房间住客的类型

地址理解:

例如:以数组指针为例子(存放数组地址的指针)

        int arr[5] = {0,1,2,3,4};  //arr类型int[5]

        int(*p)[5]=&arr; //p类型和&arr类型:int[5]*

arr整个数组 申请住宿空间的过程:

        证书编号(也就是地址编号):0x88888888为起始地址,起始地址是证书编号

        房间大小(也就是数据类型大小):int[5],20个byte大小(会占用20个门牌号)

        房间住客(也就是数据内容):0,1,2,3,4。每个住客占用4byte大小的房间(也就是4个门牌号),实际上数组中的每一个住客也会有自己的证书,这里不过多介绍,只提示是int*类型的证书(也就是地址)。

申请完之后,就形成了地址,地址类型(钥匙类型)是int[5]*。

        而指针在保存地址的时候,保存的也正是地址(证书)的信息。所以你会看到【一个int[5]类型的整个数组地址】在【使用指针进行地址保存的时候】需要用int[5]*类型的指针变量来对应保存。(p指针保存的是arr地址的证书编号,也就是arr数组的起始地址)

        此时的指针变量p和&arr数据类型相同,*p和arr数据类型相同。

指针的大小问题:

        指针保存的是地址,32位系统中的地址编号是8位16进制数字,正好在内存中占用4byte,所以32位系统中指针是4byte大小。所以指针的大小取决于地址编号。(32位系统中指针是4byte,64位系统中指针是8byte)

二级指针问题:

        接续上面那段代码的解释。前面说到过,数组中的每个住客也会有自己的证书,那该如何保存住客的地址呢?如下演示。

例如:以数组指针为例子(存放数组地址的指针)

        int arr[5] = {0,1,2,3,4};  //arr类型int[5]

        int(*p)[5]=&arr; //p类型和&arr类型:int[5]*

        int* pa = &arr[0]; //pa类型和&arr[0]:int*

        (注:&arr[0]=arr; 数组名是首元素的地址,在运用的时候类型是int*

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值