我无法理解以下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)
请帮忙 :)
有关详细信息,请参见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')
这很简单.
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 .
您可能也想看看这个问题.
| 归档时间: |
|
| 查看次数: |
251 次 |
| 最近记录: |