*C中的Vs ++优先级

dam*_*ned 1 c pointers

我无法理解以下C代码的输出:

#include<stdio.h>
main()
{
   char * something = "something";
   printf("%c", *something++);  // s
   printf("%c", *something);    // o
   printf("%c", *++something);  // m
   printf("%c", *something++);  // m
}
Run Code Online (Sandbox Code Playgroud)

请帮忙 :)

Mar*_*oon 6

有关详细信息,请参见http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence

printf("%c", *something++);
Run Code Online (Sandbox Code Playgroud)

获取*的东西,然后递增它('s')

printf("%c", *something);
Run Code Online (Sandbox Code Playgroud)

只需获取char(现在是第二个,因为最后一个语句('o')的增量

printf("%c", *++something);
Run Code Online (Sandbox Code Playgroud)

递增然后得到新位置的字符('m')

printf("%c", *something++);
Run Code Online (Sandbox Code Playgroud)

获取*的东西,然后递增它('m')


CCo*_*der 6

这很简单.

char * something = "something";
Run Code Online (Sandbox Code Playgroud)

指针的分配.

printf("%c\n", *something++);//equivalent to *(something++)
Run Code Online (Sandbox Code Playgroud)

指针递增但增量前的值被取消引用,而后递增.

printf("%c\n", *something);//equivalent to *(something)
Run Code Online (Sandbox Code Playgroud)

指针现在在前一个语句中增加后指向"o".

printf("%c\n", *++something);//equivalent to *(++something)
Run Code Online (Sandbox Code Playgroud)

指针递增指向'm'并在递增指针后取消引用,因为这是预递增.

printf("%c\n", *something++);//equivalent to *(something++)
Run Code Online (Sandbox Code Playgroud)

与第一个答案相同.另请注意'\n'printf中每个字符串的末尾.它使输出缓冲区刷新并使行打印.始终\n在printf的末尾使用a .

您可能也想看看这个问题.