c - 给定程序的输出的解释是什么
问题描述
字符 *ptr = "你好世界"; printf(ptr);
为什么它打印 helloworld 因为我没有在 printf 中使用 *ptr ,它应该给出我们用于指向整数的指针的值。
根据我的说法,我们应该在 printf 中使用 printf(*ptr)
解决方案
对于任何指针或数组p
和索引i
,表达式p[i]
完全等于*(p + i)
。
如果索引i
为零,那么我们p[0]
正好等于*(p + 0)
。将零添加到任何东西都是无操作的,所以它是*(p)
. 这里不需要括号,这给了我们*p
。
因此,在您的情况下,它与字符串中的第一个字符*ptr
相同。ptr[0]
并且只有字符串中的第一个字符,类型为char
.
“字符串”是一个以空字符结尾的字符序列,要使用它,我们有一个指向第一个字符的指针。这就是普通ptr
(没有取消引用)是什么。这与printf
格式字符串参数相匹配,它需要是指向以空字符结尾的字符串中的第一个字符的指针。
推荐阅读
- html - 使用 Font Awesome Kit 时,CORS 策略已阻止访问脚本
- python - 从 scikit-learn 中的 LinearSVC 中获取最具选择性的特征以进行多类预测
- jquery - 用于关闭和打开对话框 jquery 的相同按钮
- scala - Spark Scala Jupyter 笔记本全宽
- android - 在 ViewPager 抽屉布局中加载成像器的空指针 - 如何解决这个问题?
- javascript - 即使在缓存策略中提及关键字段后,useQuery 也不会缓存数据
- facebook - 是否可以仅针对 FB 页面中在给定日期有浏览量的帖子询问 FB Graph API?
- r - 在 R 中制作交互式多条形图(使用 SelectizeInput 和 Reactive)
- python - Plotly Python 排序表
- c++ - CMAKE target_include_directories 出现错误 C1083(找不到文件)