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

阿迪亚·乔普拉

评估的顺序是++*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副本(请参见前缀/后缀之间的区别)。因此,可以将其重写为++(*(ptr ++))(如Quimby的回答中所述),如下所示:

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

在此,可以很好地解释前后递增/递减的逻辑:

预递增和递减运算符可递增或递减对象的值,并返回对结果的引用。后递增和后递减创建对象的副本,递增或递减对象的值,并从递增或递减之前返回副本。

来自:https : //en.cppreference.com/w/cpp/language/operator_incdec

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何创建指针变量来完成数组(不是第一个元素示例:int *ptr = &arr,而不是 int *ptr = arr)

如何将ptr增加到字符串数组的第一个元素

从另一个独特的 ptr 的原始 ptr 创建独特的 ptr

从数组<shared_ptr<void>>构造一个span<shared_ptr<T>>

从数组的共享PTR访问共享PTR

如何从原始Ptr增加共享Ptr的计数

宣言将如何诠释(* ptr)[30];创造?

如何简洁地创建一个shared_ptr?

Typedef一个带有静态自定义删除器的shared_ptr类型,类似于unique_ptr

如果 arr[3] 是一个数组,而 ptr 是一个指针,那么为什么 arr 和 &arr 给出相同的结果,而 ptr 和 &ptr 却没有

在评估其参数之前,是否允许C ++编译器在寄存器中存储函数ptr?

指针表达式:* ptr ++,* ++ ptr和++ * ptr

是 memset(&ptr, 0, sizeof(ptr)); 等同于 ptr=NULL;?

编译器如何根据exception_ptr管理异常的存储

ptr = free(ptr),NULL安全吗?

(void *)ptr == ptr始终为真吗?

unique_ptr 包含 unique_ptr

传递unique_ptr与raw_ptr?

C中的if(!ptr)VS if(ptr == NULL)

shared_ptr 过期后定位一个weak_ptr

从另一个 shared_ptr 的原始指针制作 shared_ptr

从包含结构的unique_ptr中创建一个shared_ptr

如何使用静态删除器创建 unique_ptr

从 shared_ptr 获取元素

std::shared_ptr<Derived> 如何在没有编译器错误的情况下转换为 std::shared_ptr<Base> ?

C ++-shared_ptr的数组

shared_ptr到数组

访问shared_ptr的数组

如何从集合中删除共享的ptr元素?