指针问题 C语言

# 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] );

          }

结果是什么  解释是下

惺惺惜
浏览 1462回答 2
2回答

onemoo

那个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子龙

# 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 个字符           }
打开App,查看更多内容
随时随地看视频慕课网APP