这个 * 加与不加是为什么

int main(void)
{
     char *string = "I love china";
     printf("%s\n",string);
     return 0;

}
 int main(void)
{
     char * string="l love china";
     for(;*string != '0';string++)
         { 
             printf("%c", *string);    
          }
     printf("\n");
     return 0;
}

**请问一哈,这个两段代码中的printf里面的string为啥一个加了*一个没有加,是因为输出格式不同吗?**

加星是取值,不加是地址。指针类似于数组,地址是连续的,所以地址加1,正好指向下一个元素。字符串最后一个是结束标志0,以它为标准返回。

%s打印字符串,需要传入字符串;
%c打印字符,需要传入字符。
'*'的意思是解引用,通俗理解是取值的意思。
*string表示对string取值,由于string是char *类型,取得的值就是char值,就是一个字符。
同理,若是int *类型,取得的值就是int类型,需要用%d打印。

第一个加的原因:printf打印的是%s是一个字符串,字符串本身就是一个char指针,你的string也是一个char指针,所以这里不需要加就可以直接打印。
第二个加的原因:printf打印的是%c是一个字符,字符的类型是char,而你的string是一个char
指针,所以为了类型匹配,你需要把string指向的地址存的每一个数据取出来,在指针前面加*就是取值。
我以上说的很直白了。但是不完全严谨。只是针对你问的这个问题。原理上都是差不多。希望对你有帮助。