字符串与指针

#include"stdio.h"  
  void   main()  
  {  
  char   string[]="c language";  
  char   *p;  
  p=string   ;  
  printf("%s\n",string);//string不是地址名么?怎么输出的是字符串?  
  printf("%s\n",p);//p也是地址名怎么也输出字符串?  
  }
答:%s当然是字符串拉,用%d就是地址了。跟输出格式有关。

问:为什么printf("%s",*p);是错误的??  
答:%s就当然是字符串啦%d就是地址  
  ("%s",*p),*p是字符串的首地址的值,也就是'c',它不是字符串,你用%s当然错了。
   printf("%c",*p)就不会报错了。

数组名同时就相当于一个指向数组首位的指针,所以....  
  P是一个指向了数组首地址的指针

由于%s是要输出一个字符串,所以要求的参数是一个以null结尾的字符串的首地址,而%c输出的是一个字符,所以需要*p

例程1:

      printf("%c\n",string[6]);
     printf("%c\n",p[6]);

     这两个语句都可以正确输出u。

例程2:

      printf("%d\n",string[6]);
      printf("%d\n",p[6]);

    这两个语句都可以正确输出字符u的地址。

例程3:

      printf("%c\n",*(p+1));
     printf("%c\n",p[1]);

      这两个语句的作用相同。

说明:p和string都指向字符串的首地址。

   

原文地址:https://www.cnblogs.com/inspurhaitian/p/1285010.html