字符串 三级指针

#include<bits/stdc++.h>
int main()
{
	char *c[]={"HELLO","NEW","WORLD","SAYHI"};
	char **cp[]={c+3,c+2,c+1,c};
	char ***cpp = cp;
	printf("%s",**++cpp);
	printf("%s",*--*++cpp);
	printf("%s",*cpp[-2] + 3);
	printf("%s",cpp[-1][-1] + 1);
}

1.char *c[]={“HELLO”,“NEW”,“WORLD”,“SAYHI”};
c数组存的是指向字符串的指针。 *c=“HELLO” ; *(c+1)=“NEW”;

2.char **cp[]={c+3,c+2,c+1,c};
c+3,c+2,c+1,c是字符串的地址。所以cp数组存的是地址的地址
因为cp本身指向地址,又定义为char **,所以cp是三级指针。

3. char ***cpp = cp;
将三级指针cp赋给cpp,则cpp存的是cp的地址。

1.printf("%s",** ++cpp);
首先执行++cpp,得到cp数组第二个元素的地址;*++cpp,得到cp数组第二个元素的值;**++cpp则为"WORLD"的首地址,输出WORLD。

2.printf("%s",* - -* ++cpp);
++cpp指向cp+2(因为上一语句中已经自加1);*++cpp得到cp数组第三个元素的值;-- *++cpp相当于(c+1)-1得到c; *- - * ++cpp则为"HELLO"首地址,输出"HELLO"。

3.printf("%s",*cpp[-2] + 3);
cpp此时指向cp+2;执行cpp[-2],(cp+2)-2=cp,所以cpp指向cp的首地址;*cpp[-2] = *(c+3) ,即c数组第四个元素的首地址;,*cpp[-2] + 3就得到"HI"的首地址,输出"HI"。

4.printf("%s",cpp[-1][-1] + 1);
cpp此时指向cp+2;cpp[-1],所以cpp指向cp第二个元素的地址; cpp[-1][-1],即 *(c+2)[-1] = *(c+2-1) = *(c+1),得到c数组第二个元素首地址;再+1,所以输出为"EW"。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值