最近我遇到了这个我自己无法理解的问题。这三个表达式真正意味着什么?*ptr++*++ptr++*ptr我试过里奇。但不幸的是,他无法按照他讲述的这三项行动。我知道它们都是为了递增指针/指向的值而执行的。我还可以猜测可能有很多关于优先级和评估顺序的事情。就像一个指针首先递增指针然后取出指针的内容,一个简单地取出内容然后递增指针等等。正如你所看到的,我对他们的实际操作我没有清楚的理解,我想尽快明确。但是当我有机会将它们应用到程序中时,我真的迷失了。例如:int main(){ const char *p = "Hello"; while(*p++) printf("%c",*p); return 0;}给我这个输出:ello但我的期望是它会印刷Hello。最后一个请求 - 请给出一些示例,说明每个表达式在给定的代码段中的工作原理。因为大多数时候只有一段理论飞过我的脑海。
3 回答
隔江千里
TA贡献1906条经验 获得超10个赞
假设ptr指向数组的第i个元素arr。
*ptr++求值arr[i]并设置ptr为指向的第(i + 1)个元素arr。它相当于*(ptr++)。
*++ptr设置ptr为指向的第(i + 1)个元素arr并进行求值arr[i+1]。它相当于*(++ptr)。
++*ptr增加arr[i]1并评估其增加的价值; 指针ptr保持不变。它相当于++(*ptr)。
还有一个,但你需要括号来写它:
(*ptr)++增加arr[i]1并在增加之前评估其值; 指针ptr再次保持不变。
其余的你可以弄清楚自己; @Jaguar也回答了这个问题。
慕丝7291255
TA贡献1859条经验 获得超6个赞
*ptr++ : post increment a pointer ptr
*++ptr : Pre Increment a pointer ptr
++*ptr : preincrement the value at ptr location
阅读此处有关预增量和后增量运算符的信息
这将 Hello作为输出
int main()
{
const char *p = "Hello";
while(*p)
printf("%c",*p++);//Increment the pointer here
return 0;
}
- 3 回答
- 0 关注
- 1382 浏览
添加回答
举报
0/150
提交
取消