本篇博文博主无聊写的,表达方式上主观痕迹很重,并且没有经过程序验证,如果有人看的话,看不懂的也别当真,如果有错烦请指出。
那么假如一维指针是这样的:
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。
哈哈,是不是很无聊? : )