增加指针

Moh*_*bil 6 c++ pointers increment

我有一个关于增加指针的问题,我不太明白.

让我们看看2个小程序:

int iTuna=1;
int* pPointer= &iTuna;
*pPointer = *pPointer + 1 ; //Increment what pPointer is pointing to.
cout << iTuna << endl;
Run Code Online (Sandbox Code Playgroud)

在第一个程序中,我将pPointer指向的内容增加为"*pPointer =*pPointer +1".正如我所料,iTuna改为"2"并且程序打印出值"2"

int iTuna=1;
int* pPointer= &iTuna;
*pPointer++; //Increment what pPointer is pointing to.
cout << iTuna << endl;
system("PAUSE");
return 0;
Run Code Online (Sandbox Code Playgroud)

在这里,我增加了pPointer指向的增量,这是"*pPointer ++".但是这里iTuna保持为"1"并且程序打印出值"1".虽然我期望这个作为第一个工作,但事实并非如此.

请帮助我,告诉我为什么第二代代码没有像我预期的那样工作以及如何绕过它.

谢谢

Mic*_*nen 13

*pPointer++;
Run Code Online (Sandbox Code Playgroud)

相当于

*pPointer;
pPointer++; 
Run Code Online (Sandbox Code Playgroud)

所以它递增指针,而不是取消引用的值.

您可能会不时在字符串复制实现中看到这一点

  while(*source)
    *target++ = *source++;
Run Code Online (Sandbox Code Playgroud)

由于您的问题是运算符优先级的问题,如果您想要解除指针,然后递增,您可以使用parens:

(*pointer)++;
Run Code Online (Sandbox Code Playgroud)

  • 这将增加指针指向的内容: (*pPointer)++; (2认同)
  • @MohamedAhmedNabil:pPointer是一个内存盒,它包含一个包含整数的内存盒的地址。如果要递增整数,则必须首先获取该整数的地址,该地址存储在内存盒(pPointer)中。因此,要增加整数,您必须增加pPointer中存储的地址的内容:(* pPointer)++,而不是其自身的地址(pPointer ++)。* pPointer ++会递增pPointer,因为++优先于*运算符。 (2认同)

tex*_*uce 6

++ 运算符优先级高于 *d 取消引用。

你写的其实是

*(p++)
Run Code Online (Sandbox Code Playgroud)

但是你应该使用

(*p)++
Run Code Online (Sandbox Code Playgroud)