#include
int main()
{
char* str = "ABCD";
printf("%c%c%c%c",*str,*(str+1),*(str+2),*(str+3));
printf("%s",str);
}
如上例所示,为什么打印整体字符串和分开打印时,一个需要加*,一个不需要,这个疑问已经困惑很久了,求解答!
#include
int main()
{
char* str = "ABCD";
printf("%c%c%c%c",*str,*(str+1),*(str+2),*(str+3));
printf("%s",str);
}
如上例所示,为什么打印整体字符串和分开打印时,一个需要加*,一个不需要,这个疑问已经困惑很久了,求解答!
str本身就是一个char类型指针(数组名可以看作指针),%c对应的参数则是一个char类型的值,str以及str+1~3都是指针,你按照单个字符输出,必须取指针指向的地址上的值,改成str[0],str[1],str[2],str[3]就不用加*(指针也能当作数组用,前提是定义时用new生成了这段空间,且函数结束时最好归还)
而%s对应的参数就是一个指针char*,str本身就是指针
int main(){
char p="abcd";
printf("%d %d %d %d\n",p,p+1,p+2,p+3); //输出4个相邻地址,64位系统就要改成I64d 每次运行结果不一定相同
printf("%c%c%c%c\n",*p,(p+1),*(p+2),*(p+3)); //输出abcd 4个字符,即上一行3个地址上的值
printf("%c%c%c%c\n",p[0],p[1],p[2],p[3]); //采用数组的[]运算符,输出同上一行,a[k]其实相当于*(a+k)
printf("%s\n",p);//%s对应的参数就是一个char指针(这里相当于数组),这也是p的类型
}