我在这里期待h。但它显示g。为什么?
char *c="geek";
printf("%c",++*c);
You are attempting to modify a string literal, which is undefined behaviour. This means that nothing definite can be said about what your program will print out, or indeed whether it will print anything out.
Try:
char c[]="geek";
printf("%c",++*c);
For further discussion, see the FAQ.
这是undefined behaviour
因为您正在尝试修改string literal
*c 会给字符'g'
,但是当你应用这个 ++*c 意味着你正在尝试做
*c=*c+1;
这是修改字符串及其未定义的语言标准
最好使用char
数组来解决这个问题,因为“字符串”文字存储在只读内存中并且修改它会导致这种情况。
表达式将像这样计算 (++(*c)),
首先,内部 *C 将被评估,因此它将打印 g。然后增量运算符将应用于指针变量 C。在此打印语句之后,指针 c 将指向下一个字符“e”。