这两者的差异是什么?报错-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

2020-06-07 22:24:21 217 1

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

一个是*cp,一个是cp

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

C++
取消 提交回答
全部回答(1)
  • 爱吃鱼的程序员
    2020-06-07 22:24:34

    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’。
    0 0
相关问答

1

回答

数字时代的“水电煤”是什么?

2022-06-27 19:39:36 69浏览量 回答数 1

1

回答

GUI是什么呀?

2022-03-31 13:33:46 97浏览量 回答数 1

1

回答

Linux系统中的环境变量PATH和EDITOR分别的作用是什么?

2021-12-12 15:53:01 132浏览量 回答数 1

1

回答

当需序列化时使用transient的作用是什么?

2021-12-05 10:22:50 132浏览量 回答数 1

1

回答

Linux sed 常用命令中 = 的作用是什么?

2021-12-02 20:18:11 329浏览量 回答数 1

1

回答

Linux sed 常用命令中 ! 的作用是什么?

2021-12-02 20:17:09 290浏览量 回答数 1

1

回答

linux系统安全中adduser的作用是什么?

2021-12-02 20:55:05 81浏览量 回答数 1

1

回答

内置函数的重写是什么?

2021-10-30 22:54:51 123浏览量 回答数 1

1

回答

golang中给map赋值报错是为什么

2021-10-19 07:33:02 300浏览量 回答数 1

1

回答

什么关键字可以让类中的属性不被序列化下来

2019-11-20 15:44:56 795浏览量 回答数 1
+关注
爱吃鱼的程序员
https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
2
文章
21564
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载