gpt4 book ai didi

C++:来自 Stroustrup 示例的运算符优先级

转载 作者:行者123 更新时间:2023-12-01 14:20:14 26 4
gpt4 key购买 nike

Stroustrup C++ 第 4 版第 197 页有以下示例,这些示例导致打印的字符流递增,直到 null 而不是 "abc"。问题:如何评估 ++*p++* 是相同的优先级和从右到左的评估,因此我的理解是 *p 首先评估,导致p 指向的字符,则此字符递增++。这种理解是否正确?谢谢

#include <iostream>
using namespace std;

void fp(char* p)
{
while (*p)
cout << ++*p;
}

void fr2(char& r)
{
char* p = &r;
while (*p)
cout << ++*p;
}


int main(int argc, char *argv[])
{
char s[] = "abc";
char *p = s;

fp(p);
fr2(*p);

return 0;
}

最佳答案

是的,关于优先级和结合性,你是对的。这个表达式:

++*p;

被解析为

++(*p);

即首先完成 p 的间接寻址,然后递增返回的值。

这意味着在 while 循环中:

while (*p)
cout << ++*p;

指针 p 实际上从未递增。这会导致无限循环,其中只有 p[0] 的值永远递增。

这是一个 demo ,它将输出显示为从 a 开始的很长的 ascii 值序列。请注意 abc 打印。

同理,表达式:

*++p;

解析为:

*(++p);

这很好,因为指针先递增,然后指针被取消引用。

关于C++:来自 Stroustrup 示例的运算符优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62249776/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com