насколько значение указателя одинаково даже после увеличения адреса, для переменной его значение - PullRequest
2 голосов
/ 16 апреля 2019

В приведенной ниже программе я получаю одно и то же значение для различных операций с указателями:

#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 Ответ

5 голосов
/ 16 апреля 2019

С помощью (*ptr)++) вы увеличиваете значение, на которое указывает ptr, так что ваш «массив» содержит два равных значения, то есть ptr[0]==2 и ptr[1]==2.Вот почему *ptr и *++ptr дают одно и то же значение, хотя они указывают на разные адреса.

Удалите printf("%d ", (*ptr)++), и вы увидите более ясное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...