指针增量问题

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

为什么我在使用时会收到一条警告消息,因为表达式结果未使用

*(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++ 中使用

++
符号;

c++ pointers increment
2个回答
0
投票

一元

*
++
运算符具有相同的优先级,但它们的计算方式为 从右到左,请参阅 https://en.cppreference.com/w/cpp/language/operator_precedence

这意味着

*(p)++

相当于

*(p++);

请注意,这不会修改指针指向的值,而是修改指针本身。这通常仅在数组上下文中才有意义。您需要以不同的方式添加

()
括号才能达到所需的效果:

int ans = (*p)++;
(*p)++

0
投票

语句表达式

*(p)++
产生一个结果。你忽略了这个结果,让它白白浪费掉。因此,如果编译器说结果未使用,那么它是正确的。

要增加值,您需要首先取消引用指针,然后使用增量运算符:

(*p)++


正如评论中提到的,

*(p)++
实际上与
*p++
相同,它获取
*p
的旧结果,然后递增指针。

由于您已经增加了指针

p
一次,它将不再指向有效位置。再次取消引用变量
p
将导致未定义的行为,因为你现在超出了界限。

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