繁体   English   中英

C++ 指针增量

[英]C++ pointer increment

请帮助我了解 q 的值如何最初为 1,后来变为 0。

代码:

#include <stdio.h>
int main()
{    
    int i=10;
    int *p, *q;
    p = &i;
    printf("%u\n%u\n%u\n",p,q,*q);
    *q++=*p++;
    printf("%u\n%u\n%u\n%u",p,q,*p,*q);
    return 0;
}

Output:

1527896876
1527897120
1
1527896880
1527897124
1527897124
0
int *p, *q; p = &i; printf("%u\n%u\n%u\n",p,q,*q);

int*是格式说明符 %u 的错误类型。 如果您传递了错误类型的参数,那么您的程序的行为是未定义的。


 printf("%u\n%u\n%u\n",p,q,*q); *q++=*p++;

这里, q具有不确定的值。 它不指向任何 object。 您可以通过指针间接访问它指向的 object。 这是一个矛盾,因为它没有指向任何 object。

通过不确定的指针间接导致未定义的行为。


您的程序的行为是未定义的。 这解释了有关程序行为的一切。

我想发生的事情是这里

*q++=*p++;

q 的后自增运算符在赋值后执行。 因此,您基本上将 q 的值设置为 p,然后将其递增。 另外,我认为 p 的增量运算符没有任何作用。

为了更好地理解看下面的例子

#include <stdio.h>
int main() {
  int i = 10;
  int *p;
  int *q = new int[2];
  q[0] = 9;
  q[1] = 99;
  p = &i;
  printf("%u\n", *q);
  *q++ = *p++;
  printf("%u\n", *q);
  printf("%u", *--q);
  return 0;
}
9
99
10

请注意,最后 q 如何指向下一个元素,这要归功于后增量运算符。

无论如何,我不知道你想做什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM