什么是r = *( - p)+ 1;做?

时间:2014-10-13 19:14:04

标签: c++ pointers memory-management

我一直在使用John Hubbard编写的C ++编程,并遇到了这个问题:

  

执行以下代码后,确定每个指示变量的值。假设整数占用4个字节,m存储在内存中,从字节0x3ffd00开始。

int m = 44;
int* p = &m;
int n = (*p)++;
int* q = p - 1;
r = *(--p) + 1;
++*q;

我们被要求找到

的值
m
n
&m
*p
r
*q
代码执行后

所以我理解r是对m的引用,并且n被赋予p的解除引用值,然后p递增。所以在那时m = r = 45且n = 44。我不明白是什么

int* q = p - 1; 
r = *(--p) + 1; 
++*q;

会做的。有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

  1. p不是对m的引用; p是指向m的指针。指针和引用是不同的。
  2. q被定义为紧接m之前的整数的指针。那是在堆栈上的未定义位置。你确定这不会说“p + 1”,因为......
  3. ...下一行(r = *(--p) + 1;)递减p,取指针处的值,然后加1。除非上面有拼写错误,否则这是未定义的行为。
  4. ++*q再次在未定义的位置递增值 - 未定义的行为。提问者可能依赖(或诱惑你依赖)它减少并增加相同值的事实,但这仍然是未定义的行为。

答案 1 :(得分:1)

递增和递增指针通常用在数组中。

当您递减/递增指针时,它不会递减/递增它指向的值。它的作用是,递增/递减其数据类型大小所指向的地址。

int m = 44;
int* p = &m;
int n = (*p)++;  //n=45
int* q = p - 1;   //q point to &m-(sizeof(int)) , value of address pointed to by q would be undefined and may even cause segfault once accessed
r = *(--p) + 1; //undefined, we don't know what is the value in address &m-1, then add 1 to its value. May even cause segfault.
++*q;  //increment value pointed to by q(which is undefined and may even cause segfault)