在使用指针时,为什么不能使用“++”来增加int变量的值?

问题描述 投票:0回答:2

我试图使用存储该元素地址的指针来增加数组内元素的值。

当我把它写成“p ++;”它不起作用,而如果我把它写成*p=*p+1它可以工作。

*p=*p+1; // this increments the value
*p++; //while this does not

我期待两种方式工作

c++ pointers increment
2个回答
0
投票
#include <iostream>
using namespace std;

int main (int argc, char *argv[])
{
  int numbers[] = { 100, 200, 300, 400, 500, 600 };
  int *p1 = &numbers[0];
  int *p2 = &numbers[2];
  int *p3 = &numbers[4];
  *p1 = *p1 + 1;
  *p2 = *p2++;
  ++*p3;
  cout << numbers[0] << " " << numbers[1]  << " " << numbers[2] << " " <<  numbers[3] << " " <<  numbers[4] << " " <<  numbers[5];
}

通过Xcode运行这个给我一个关于出了什么问题的线索,它说:“temp / test.cxx:11:12:警告:未经测试的修改和访问'p2'[-Wunsequenced]”。

输出是101 200 300 300 501 600

正如您在问题中所说,第一种方法有效。

第二种做法与你期望的完全不同:它取p2(300)指向的值,然后递增指针并将值保存回新地址。

p3的第三个例子更接近你想要实现的目标。


5
投票

operator ++具有比取消引用更高的优先级,因此*p++递增指针然后执行解除引用。如果你想增加它最初指向的值,那么你需要添加括号:(*p)++;

© www.soinside.com 2019 - 2024. All rights reserved.