在下面的程序中,我针对不同的指针操作获得了相同的值:
#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
如何打印相同的值。当我们增加指针地址时应该有所不同
我可以理解的变量的后增量和前增量,这里都是前增量
答案 0 :(得分:5)
使用(*ptr)++)
,您将ptr
指向的值递增,这样您的“数组”将包含两个相等的值,即ptr[0]==2
和ptr[1]==2
。这就是*ptr
和*++ptr
尽管指向不同的地址而产生相同值的原因。
删除printf("%d ", (*ptr)++)
,您会看到更清晰的图片。