在下面的程序中,对于不同的指针操作,我将获得相同的值:
#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);
}
Run Code Online (Sandbox Code Playgroud)
输出: 0 1 2 2 3
我的疑问是如何*ptr以及*++ptr在打印相同的值。随着我们增加指针地址,它应该有所不同
我能理解的变量的后增量和前增量,这里都是前增量
使用(*ptr)++),您可以将值增加到要ptr指向的点,这样您的“数组”将包含两个相等的值,即ptr[0]==2和ptr[1]==2。这就是为什么*ptr,并*++ptr产生相同的价值,但它们指向不同的地址。
删除printf("%d ", (*ptr)++),您会看到更加清晰的画面。