gpt4 book ai didi

c++ - 如果 ptr 是指向静态数组第一个元素的 ptr,编译器将如何评估++*ptr++?

转载 作者:太空狗 更新时间:2023-10-29 23:43:16 26 4
gpt4 key购买 nike

++*ptr++ 中的求值顺序是什么?当操作涉及指针和左值时它会改变吗?

如果a++的优先级高于*a++a,那么为什么是++*a++ 评估为首先返回递增的值然后更改指针,而不是更改指针,然后递增该位置的值。优先级引用:https://en.cppreference.com/w/cpp/language/operator_precedence

arr = {9, 99, 999 };
int *ptr = arr;
std::cout << ++*ptr++ << '\t';
std::cout << *ptr;

我预计输出为 100 100,但实际输出为 10 99。

最佳答案

后缀递增a++ 递增指针ptr,但返回操作前ptr 的拷贝(参见前缀/后缀之间的区别)。因此它可以重写(如 Quimby 的回答中所述)为++(*(ptr++)) 并且如下所示:

  1. ptr++ :递增 ptr 使其指向 99,但返回另一个仍指向 9 的指针
  2. *ptr++ :取消引用,计算结果为 9
  3. ++*ptr++ : 递增复制指针指向的值,即递增 9 并返回 10

这里很好地解释了前/后递增/递减背后的逻辑:

Pre-increment and pre-decrement operators increments or decrements the value of the object and returns a reference to the result. Post-increment and post-decrement creates a copy of the object, increments or decrements the value of the object and returns the copy from before the increment or decrement.

发件人:https://en.cppreference.com/w/cpp/language/operator_incdec

关于c++ - 如果 ptr 是指向静态数组第一个元素的 ptr,编译器将如何评估++*ptr++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55440179/

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