#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都指向字符串的首地址。