菠萝菠萝啵 发表于 2019-1-28 21:41:50

关于为什么输出字符串的时候不加* ???

#include <stdio.h>
int main()
{
        char *p1 = {
                "让编程改变世界 -- 鱼C工作室",
                "Just do it -- NIKE",
                "一切皆有可能 -- 李宁",
                "永不止步 -- 安踏",
                "One more thing... -- 苹果"
        };
        int i;
        for (i = 0; i < 5; i++)
        {
                printf("%s\n", p1);
        }
        return 0;
}

例如这里我感觉应该是printf("%s\n",*p1);
这个问题困扰我好久了,求大佬解答。{:5_109:}

ba21 发表于 2019-1-28 21:54:23

{:10_312:}

jackz007 发表于 2019-1-28 22:14:40

本帖最后由 jackz007 于 2019-1-28 22:20 编辑

#include <stdio.h>
int main()
{
      char * p1 = {
               "让编程改变世界 -- 鱼C工作室" ,
               "Just do it -- NIKE" ,
               "一切皆有可能 -- 李宁" ,
               "永不止步 -- 安踏" ,
               "One more thing... -- 苹果"
      }                                                 ;
      int i                                             ;
      for (i = 0 ; i < 5 ; i ++) printf("%s\n" , p1) ;
}

      p[] 是个指向字符型数据的指针数组,含有5个元素,分别指向 5 个字符串的起始地址,而语句

      printf("%s\n" , p1) ;

      所要求的变量是要显示的字符串首地址,正好对应于指针数组里面的 5 个元素,所以,不需要在 p1[] 前面加上 * 号。如果加上 * 那么表示的就是字符串里的首字符,而不是字符串的首地址了。

迷雾道长 发表于 2019-1-29 19:39:30

原因就是字符串在c语言中是用字符数组表示的,而数组名就表示数组的地址,所以直接用数组名就是相当于其他数据类型加了*的

丶忘却的年少o 发表于 2019-1-30 13:53:10

printf 中用 %s 输出的类型对象是什么?
是不是指针?
是的话没问题了。定义的就是指针数组,每一项都是指针,你输出哪一句就给哪一句的指针
页: [1]
查看完整版本: 关于为什么输出字符串的时候不加* ???