首页 > 解决方案 > 给定程序的输出的解释是什么

问题描述

字符 *ptr = "你好世界"; printf(ptr);

为什么它打印 helloworld 因为我没有在 printf 中使用 *ptr ,它应该给出我们用于指向整数的指针的值。

根据我的说法,我们应该在 printf 中使用 printf(*ptr)

标签: cpointersc-strings

解决方案


对于任何指针或数组p和索引i,表达式p[i]完全等于*(p + i)

如果索引i为零,那么我们p[0]正好等于*(p + 0)。将零添加到任何东西都是无操作的,所以它是*(p). 这里不需要括号,这给了我们*p

因此,在您的情况下,它与字符串中的第一个字符*ptr相同。ptr[0]并且只有字符串中的第一个字符,类型为char.

“字符串”是一个以空字符结尾的字符序列,要使用它,我们有一个指向第一个字符的指针。这就是普通ptr(没有取消引用)是什么。这与printf格式字符串参数相匹配,它需要是指向以空字符结尾的字符串中的第一个字符的指针。


推荐阅读