我试图使用存储该元素地址的指针来增加数组内元素的值。
当我把它写成“p ++;”它不起作用,而如果我把它写成*p=*p+1
它可以工作。
*p=*p+1; // this increments the value
*p++; //while this does not
我期待两种方式工作
#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的第三个例子更接近你想要实现的目标。
operator ++
具有比取消引用更高的优先级,因此*p++
递增指针然后执行解除引用。如果你想增加它最初指向的值,那么你需要添加括号:(*p)++;