# include <stdio.h> void main( ) { char *str[]={"first", "second", "third", "fourth", "fifth"}; char **ptr=str; int i; for(i=0;i<3;i++) printf("%s", (ptr+2)[i] ); }结果是什么 解释是下
2 回答
已采纳
onemoo
TA贡献883条经验 获得超454个赞
那个printf语句,应该并不是输出第三行的第i个字符。
ptr是个char**指针没错, ptr一开始指向str数组中的第一个元素,注意这个数组元素类型是char指针,指向那几个字符串。
ptr+2 就得到str数组第一个元素后数两个的那个指针(也就是指向"third")。注意:得到的仍然是个char**的指针类型。
对一个char**指针类型应用下标操作符,相当于得到相对ptr指针偏移后的指针,也就是说:
(ptr+2)[0] 得到的还是ptr+2指针
(ptr+2)[1] 得到的还是ptr+2指针后面位置的指针,也就是相当于ptr+3,那么就指向了str数组的第4个元素"fourth"
(ptr+2)[2] 同理,得到的是ptr+2指针后面第二个位置的指针,也就是相当于ptr+4,那么就指向了str数组的第5个元素"fifth"
所以,for循环中的printf语句分别打印出的应该是"third", "fourth", "fifth"这三个字符串,当然它们三个是连着打出的 "thirdfourthfifth"
LZ子龙
TA贡献1条经验 获得超0个赞
# include <stdio.h> void main( ) { char *str[]={"first", "second", "third", "fourth", "fifth"}; //创建一个一维指针数组; char **ptr=str; //定义一个二级指针指向 str,也就是把str的每一个元素当作了一个指针 int i; for(i=0;i<3;i++) printf("%s", (ptr+2)[i] ); // 输出第三行的第 i 个字符 }
- 2 回答
- 0 关注
- 1461 浏览
添加回答
举报
0/150
提交
取消