【发布时间】:2016-06-02 18:40:01
【问题描述】:
char str[] = "hello World!!!!!";
char *ptr = str + 6;
printf("%s",ptr);
输出:世界!!!!!!
这里在printf 语句中指定ptr 而不是*ptr,因此为了打印变量的值,我们使用带有指针名称的*(解引用运算符)。比如:
int i=2;
int *ptr;
ptr=&i;
printf("%d",ptr);
打印地址,因为 ptr 在上面的示例中类似地存储地址(&i),因为它应该打印地址而不是 str[] 的值,因为只使用了 ptr 而不是 *ptr,但它没有。为什么?
【问题讨论】:
-
,but it doesn't why??...RTFM... -
讽刺,但 VTC 是基于选项的......因为我们不知道语言设计者的观点。
-
“%s” printf 标记查找 (char*)。在第二个中,您将指针打印为 int。如果您使用 -Wall 标志,它应该会给您一个编译器警告。
-
可能是因为我没有使用 %u 代替 %d,但是 gcc 在第二个示例中显示了正确的输出:6422312 因为它打印了地址
-
如果你想成为一名优秀的程序员,你应该更多地关注风格。首先是一致性,您不会始终如一地使用空格。其次,像您的第一个示例一样在运算符周围添加空格使代码更易于阅读。此外,出于同样的原因,昏迷后的空格也很好。