Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 递增指针不工作_C++_Pointers - Fatal编程技术网

C++ 递增指针不工作

C++ 递增指针不工作,c++,pointers,C++,Pointers,我正试图增加指针。我确信它类似于do I+=1,但我得到了地址 #include "stdafx.h" #include <iostream> using namespace std; int main() { int i = 42; int *a = &i; *a++; cout << *a; cin.get(); return 0; } 有人能解释为什么吗?++的运算符优先级高于指针解引用运算符* 因此,*a

我正试图增加指针。我确信它类似于do I+=1,但我得到了地址

#include "stdafx.h" 
#include <iostream>
using namespace std;
int main()
{
    int i = 42;
    int *a = &i;
    *a++;
    cout << *a;
    cin.get();
    return 0;
}
有人能解释为什么吗?

++的运算符优先级高于指针解引用运算符*

因此,*a++所做的是在递增指针值之前,返回i的值和原来的*a的值

在对该表达式求值之后,a现在指向i的地址以外的其他内容,并且后续的*a的行为未定义

如果要通过指针增加i,则使用*a++

++的运算符优先级高于指针解引用运算符*

因此,*a++所做的是在递增指针值之前,返回i的值和原来的*a的值

在对该表达式求值之后,a现在指向i的地址以外的其他内容,并且后续的*a的行为未定义


如果要通过指针增加i,则使用*a++

如果希望输出为43,则必须更改*a++;到*a++

除了测试和学习之外,像你这样的代码比C++更重要。C++提供了一种引用数据并在其上运行的另一种方法,通过语言称为“引用”。
int i=42;
int &a=i;  // ‘a’ is a reference to ‘i’
a++;
assert(i==43);  // Assertion will not fail

引用对于向函数传递参数特别有用,而不会有空指针或移位指针的风险。

如果希望输出为43,则必须更改*a++;到*a++

除了测试和学习之外,像你这样的代码比C++更重要。C++提供了一种引用数据并在其上运行的另一种方法,通过语言称为“引用”。
int i=42;
int &a=i;  // ‘a’ is a reference to ‘i’
a++;
assert(i==43);  // Assertion will not fail

引用在向函数传递参数时特别有用,而不会有空指针或替换指针的风险。

在到达代码行之前,代码工作正常

*a++;

正如你所知道的,C++编译器会把这个代码分解成

*a = *(a+1);
也就是说,它将首先递增a的地址值,然后将该值分配给*a。但如果你这样做

*(a)++;
然后您将得到正确的输出,即43


对于输出-

您的代码可以正常工作,直到到达行

*a++;

正如你所知道的,C++编译器会把这个代码分解成

*a = *(a+1);
也就是说,它将首先递增a的地址值,然后将该值分配给*a。但如果你这样做

*(a)++;
然后您将得到正确的输出,即43


对于输出-

我获得地址意味着什么

你查过操作规程了吗

++-后缀的优先级高于*-取消引用-因此:

*a++;
事实上:

*(a++);
而不是:

(*a)++;

。。。正如你可能的意思。这就是为什么我总是建议错误的括号太多而不是太少。明确你的意思:

我得到的地址是什么意思

你查过操作规程了吗

++-后缀的优先级高于*-取消引用-因此:

*a++;
事实上:

*(a++);
而不是:

(*a)++;
。。。正如你可能的意思。这就是为什么我总是建议错误的括号太多而不是太少。明确你的意思:

你使用了*a++

由于增量运算符++的优先级高于指针*,实际发生的情况是指针地址正在递增。因此,新的*a没有定义的值,因此它将给出一个未定义的值 *a++;是a++的等价物

要解决这个问题,可以使用括号*a++;或者简单地使用预增量运算符+++*a

您使用了*a++

由于增量运算符++的优先级高于指针*,实际发生的情况是指针地址正在递增。因此,新的*a没有定义的值,因此它将给出一个未定义的值 *a++;是a++的等价物


要解决这个问题,可以使用括号*a++;或者简单地使用预增量运算符+++*a

你得不到地址,你得到的是一个不确定的数字,恰巧是非常大的。你得不到地址,你得到的是一个不确定的数字,恰巧是非常大的。回答很好,加上一个,尽管我尊重地不同意你的上一句话。对我来说,包含括号表示有意偏离正常操作员行为。在这个网站上有很多受人尊敬的程序员持相反的观点。好答案加上一个,尽管我尊重地不同意你的上一句话。对我来说,包含括号表示有意偏离正常操作员行为。然而,这个网站上有很多备受尊敬的程序员持相反的观点。