您的位置:首页 > 其它

C 语言中的好基友 数组和指针之三

2015-08-05 09:11 309 查看
经过前两章的积累准备挑战一下变态的***

代码如下

char stra[256]= "abcdefg";
char strb[256]= "opqrst";
char strc[256]= "uvw";
char strd[256]= "xyz";
char* strstra[2] = { stra, "xxx"};
char* strstrb[2] = { strb, "uuu"};
char* strstrc[2] = { strc, "www"};
char* strstrd[2] = { strd, "yyy"};
char** super[2][2] = { { strstra, strstrb}, { strstrc,strstrd } };//声明了一个二维数组,每个元素是char**类型,由super[0]和super[1]两个子数组组成
printf("1..%p \n",super);
printf("1..%p \n",super[0]);
printf("1..%p \n",super[1]);
printf("2..%s \n",super[0]);
printf("2..%s \n",*super[0]);
printf("2..%s \n",**super[0]);
printf("2..%c \n",***super[0]);
printf("3..%s \n",(*super[0])[0]);
printf("3..%s \n",(*super[0])[1]);
printf("4..%s \n",*(*super[0]+1));
printf("5..%s \n",super[0][0][0]);
printf("5..%c \n",super[0][0][0][0]);
printf("5..%c \n",super[0][0][0][1]);
printf("6..%s \n",*(*super[1]+1));
printf("6..%s \n",**(super[1]+1));
printf("6..%s \n",*(super[1]+1));
printf("7..%c \n",*(**super[0]+1));
printf("8..%c \n",*(**super[0]+2));
printf("size of super is %d \n",sizeof(super));
printf("size of super[0] is %d \n",sizeof(super[0]));


尝试解读最要命的***super[0]是个神马

char stra[256]= "abcdefg"; //strstra是一个数组,每个元素是char*类型的字符串

char* strstra[2] = { stra, "xxx"}; //super[2][2]总共有2×2=4个元素,每个元素是char**类型

char** super[2][2] = { { strstra, strstrb}, { strstrc,strstrd } }; //根据第二章节的结论,我们可以很快知道数组super 由super[0]和super[1]两个子数组组成

Step1) super[0] 是 { strstra, strstrb} 的数组名,同时也是指向这个数组的指针,指针类型是char**,也就是说super[0]指向strstra,而super[0]+1指向strstrb

既然super[0]指向strstra的指针,那么指针解引用 *super[0]就是strstra

Step2) 进一步推算**super[0]就是*strstra,我们根据第一章节结论,strstra就是指向stra的指针,所以*strstra就是stra,那么**super[0]就是stra

Step3) 根据上一步推论,***super[0]就是*stra,而stra是指向"abcdefg"的首元素的指针(指针类型是char),所以最终*stra就是字符'a',也就是***super[0] = 'a'

最后给出运行结果,可以对比下是否和自己的推论一致

1..0xbfdeb7a0
1..0xbfdeb7a0
1..0xbfdeb7a8
2..ȷ޿��޿��޿��޿з޿�и޿�й޿�к޿�xyz
2..к޿�xyz
2..abcdefg
2..a
3..abcdefg
3..xxx
4..xxx
5..abcdefg
5..a
5..b
6..www
6..xyz
6..з޿�и޿�й޿�к޿�xyz
7..b
8..c
size of super is 16
size of super[0] is 8
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: