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

tuh*_*nda 2 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);
}
Run Code Online (Sandbox Code Playgroud)

输出: 0 1 2 2 3

我的疑问是如何*ptr以及*++ptr在打印相同的值。随着我们增加指针地址,它应该有所不同

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

Ste*_*ner 5

使用(*ptr)++),您可以将值增加到要ptr指向的点,这样您的“数组”将包含两个相等的值,即ptr[0]==2ptr[1]==2。这就是为什么*ptr,并*++ptr产生相同的价值,但它们指向不同的地址。

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