为什么我在使用时会收到一条警告消息,因为表达式结果未使用
*(p)++;
并且不会在这里收到任何警告
int ans = *(p)++;
*p
的值将值传递给ans变量,但打印时它不会增加。
代码:-
{
int first = 10;
int *p = &first;
int **q = &p;
int second = 20;
*q = &second;
int ans = *(p)++;
*(p)++;
cout<<first<<" "<<second;
cout<<ans;
}
我预计它会增加。并在 C++ 中使用
++
符号;
一元
*
和 ++
运算符具有相同的优先级,但它们的计算方式为 从右到左,请参阅 https://en.cppreference.com/w/cpp/language/operator_precedence
这意味着
*(p)++
相当于
*(p++);
请注意,这不会修改指针指向的值,而是修改指针本身。这通常仅在数组上下文中才有意义。您需要以不同的方式添加
()
括号才能达到所需的效果:
int ans = (*p)++;
(*p)++
语句表达式
*(p)++
产生一个结果。你忽略了这个结果,让它白白浪费掉。因此,如果编译器说结果未使用,那么它是正确的。
要增加值,您需要首先取消引用指针,然后使用增量运算符:
(*p)++
。
正如评论中提到的,
*(p)++
实际上与*p++
相同,它获取*p
的旧结果,然后递增指针。
由于您已经增加了指针
p
一次,它将不再指向有效位置。再次取消引用变量p
将导致未定义的行为,因为你现在超出了界限。