qq_344258165 2016-07-05 03:36 采纳率: 100%
浏览 924
已采纳

关于字符串的整体打印和分开打印遇到的疑问

#include

int main()
{
char* str = "ABCD";
printf("%c%c%c%c",*str,*(str+1),*(str+2),*(str+3));
printf("%s",str);
}

如上例所示,为什么打印整体字符串和分开打印时,一个需要加*,一个不需要,这个疑问已经困惑很久了,求解答!

  • 写回答

2条回答 默认 最新

  • djq_cpp 2016-07-05 04:55
    关注

    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的类型
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!