【发布时间】:2016-02-06 17:18:03
【问题描述】:
当我跑步时
char * a = "string";
char * b = a;
while (*a != '\0')
printf("%p %c\n", *(a), *(a++));
printf("%p\n", *(b+2));
输出看起来像
0x73 s
0x74 t
0x72 r
0x69 i
0x6e n
0x67 g
0x72
另外,程序如何确定 (b+2) 位于 0x72。我以为它只是将 b 的起始地址加 2,在本例中为 0x73。
编辑:这不是未指定行为的情况。正如答案中所解释的,我错误地将值传递给地址格式说明符而不是指针本身。
【问题讨论】:
-
...这可能是因为未定义的行为!
-
@Olaf;不完全是。它有一些新的东西。
-
@hacks:太糟糕了,我们只能显示一个副本。随意在格式字符串中为错误的类型说明符添加 UB :-)
-
查看ASCII-table 并与您显示的输出进行比较。注意到什么了吗?
标签: c arrays pointers pointer-arithmetic