为了账号安全,请及时绑定邮箱和手机立即绑定

指针问题 C语言

指针问题 C语言

C C++
惺惺惜 2015-12-20 23:18:47
# 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"

查看完整回答
反对 回复 2015-12-21
?
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 个字符
          }


查看完整回答
反对 回复 2015-12-20
  • 2 回答
  • 0 关注
  • 1436 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信