开发者社区> 问答> 正文

这两者的差异是什么?报错

char *cp = "Hello Dongnao";
printf("cp 数据: %s\n", *cp); // 我一开始这样写的,一直报错
printf("cp 数据: %s\n", cp); //但是这样写,可以输出Hello Dongnao

一个是*cp,一个是cp

我希望能帮我解释下,这两者的差异,谢谢

展开
收起
爱吃鱼的程序员 2020-06-07 22:24:21 398 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    char *cp = "Hello Dongnao";这句话的意思是声明了一个类型是char*的变量cp,并且"Hello Dongnao"的首地址赋值给cp,所以printf("cp 数据: %s\n", cp)打印整个字符串,而*cp是取cp的内容(cp的内容是"Hello Dongnao"的首地址)所以*cp其实是‘H’不能用%s打印可以用printf("cp 数据: %d\n", *cp);查看

    1. 代码printf("cp 数据: %s\n", cp); 的解释: cp是指向字符H的指针。%s表示输出的格式是字符串。整句话的意思是:调用方法printf(),按字符指针cp所示的字符地址,以字符串格式(%s)输出数据。于是,找到第一个字符H,并立刻输出'H',随后又依次找到并输出了‘e’,‘l’‘l’,‘o’,‘w’,‘空格‘,‘D',‘o’,’n’,‘g’,‘n’,‘a’,‘o’,接下来遇到显示字符串结束的转义字符’\0’,完成了printf()的调用。
    2. 如 剑心无痕所言,*cp要提取的是 cp的内容 ‘H’,并非它(字符‘H’)的地址。所以%s与*cp无缘,编译报错。如果将%s换成%c,则可以运行,但会有警告,而且只打印出第一个字母‘H’。
    2020-06-07 22:24:34
    赞同 展开评论 打赏
问答分类:
C++
问答地址:
问答排行榜
最热
最新

相关电子书

更多
快速变化背景下,组织如何保持过程的稳定性 立即下载
快速变化背景下,组织如何保持过程的稳定性? 立即下载
图计算优化技术探索 立即下载