即使增加地址后,指针的值也如何相同,对于变量而言,其值是不同的

时间:2019-04-16 05:58:57

标签: c pointers

在下面的程序中,我针对不同的指针操作获得了相同的值:

#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如何打印相同的值。当我们增加指针地址时应该有所不同

我可以理解的变量的后增量和前增量,这里都是前增量

1 个答案:

答案 0 :(得分:5)

使用(*ptr)++),您将ptr指向的值递增,这样您的“数组”将包含两个相等的值,即ptr[0]==2ptr[1]==2。这就是*ptr*++ptr尽管指向不同的地址而产生相同值的原因。

删除printf("%d ", (*ptr)++),您会看到更清晰的图片。