为什么没有三维指针的疑问以及多维数组的用处

本篇博文博主无聊写的,表达方式上主观痕迹很重,并且没有经过程序验证,如果有人看的话,看不懂的也别当真,如果有错烦请指出。

那么假如一维指针是这样的:

int *p;

如果是32位系统,那么p本身也就是一个32位的内容,指向32位的int字符。

二维指针是这样的:

char **p;

依旧是32位系统,p本身是32位,指向的地址也是32位,该地址指向的内容则是8位的。


所以一维指针的作用就是存储那个字符或者字符串的地址,

而二维指针的作用就是存储多个字符或者字符串的地址,比如char *p[8]就是指向多个字符串,而char (*p)[8]就是指向多个字符。


那么如果有这样的东西 char ***p; 这个东西是可以编译通过的。


二维指针和三维指针的区别在于:

二维指针**p的*p形态时,其值为地址,*(++*p)为地址加一后取地址后再取值,所以第一级地址是连续的,第二级值的地址可以是分散的。

同理三维指针***p,第一级地址是连续的,第二级值的地址可以是分散的,第三级值的地址可以是更分散的。

所以二维指针已经有三维指针的分散寻址的功能了并且说到底都是指向多个字符或者字符串,目前找不到理由用这种复杂容易出错但是又没优势的品种。


而关于多维数组,一个有意思的用法如

char y[2][2][2][2] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

这样就是一个4bit的二进制转成十进制的转换器了,如输入[0][0][0][1] 就会输出1,而输入[1][0][0][0]就会输出8。


哈哈,是不是很无聊?    : )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值