二维数组的指针表示及char** b,char*** c,int** d,int*** f的含义

之前我写过一遍关于指针的博客,当时我觉得我已经明白了指针的意义,当我同学问我一道题时,我竟然有些懵逼,后来想想就明白了。
在这里插入图片描述
当时的问题是,为啥a+1和p+1的值不一样,你们看到这点是否有疑惑,其实有疑惑是因为不了解p代表什么,a又代表什么,简单的来说,首先我们先说a,a其实是代表第0行的首地址,其起步是2B,为什么呢,下面看看内存分析图就明白了,在这里插入图片描述
所以说,二维数组在内存中,也是按一维数组方式存储的,上面的a+1,就变成了a[1],a+1=a的地址+char[2],因为char占一个字节,所以char[2]=2,接下来说说p,p说到底也是一个指针,只不过是存了地址的指针而已,不同系统中,指针变量占的字节个数不一样,以前的十六位系统中,占两个字节,三十二位系统中,占4个字节,到现在的六十四位系统中占8B,前面说了,q是一个指针,所以p+1=p的首地址+8,不知道说到这里,你们是否看懂了没。
好了,我们看看我标题的那几个值char* a,char** p,char*** c,int** f,int*** g的结果如何,看看是否按我上面所说的那样
在这里插入图片描述
结果是不是按我所说的一样?不过得注意,会出现一些警告哦。
总结:char** 是地址中存了地址
char* 是地址中存了char的值
那char** 计算就根据地址的宽度
不管有多少个*,都是4个字节(32位)。
char*** a 还是char**a
a + 2
a去掉一个
,宽度还是4,所以4乘2

不管有多少个*,都是4个字节(64位)。
char*** a
a + 2
a去掉一个*,还剩2个*,宽度还是8,所以8*2

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值