在下面的程序中,我得到不同指针操作的相同值:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
int main(void) {
int i;
int *ptr = (int *)malloc(5 * sizeof(int));
for (i = 0; i < 5; i++)
*(ptr + i) = i;
printf("%d ", *ptr++);
printf("%d ", (*ptr)++);
printf("%d ", *ptr); ---------> o/p: 2
printf("%d ", *++ptr);--------> o/p: 2
printf("%d ", ++*ptr);
}
输出:0 1 2 2 3
我怀疑*ptr
和*++ptr
是如何印刷相同价值的。当我们递增指针地址时它应该是不同的
我可以理解的变量的后增量和预增量,这里都是预增量
使用(*ptr)++)
,你增加ptr
指向的值,这样你的“数组”包含两个相等的值,即ptr[0]==2
和ptr[1]==2
。这就是为什么*ptr
和*++ptr
产生相同的值,尽管它们指向不同的地址。
删除printf("%d ", (*ptr)++)
,你会看到更清楚。