Почему я получаю адрес памяти этого элемента? - PullRequest
1 голос
/ 22 марта 2019

проверить, как "* ++ p" должно быть на языке C, я отлаживаю свой код в кодовых блоках, но он получил это значение: "* ++ p = 6356748"; согласно книге C primer plus, он должен быть20. почему я это понимаю?это мой код:

#include <stdio.h>
void main()
{
    int arr[]={10,20};
    int *p=arr;
    printf("*P=%d\n",*p);
    printf("*p++=%d\n",*p++);
    printf("++*p=%d\n",++*p);
    printf("*++p=%d\n",*++p);
}

и результат отладки:

*P=10
*p++=10
++*p=21
*++p=6356748

1 Ответ

1 голос
/ 22 марта 2019

Первый printf печатает первый элемент arr и оставляет указатель p в покое.Второй printf печатает первый элемент снова, а затем увеличивает после печати указатель p, поэтому теперь p указывает на второй элемент arr.Третий printf получает второй элемент p, а затем увеличивает его, но оставляет p без изменений.Последний printf увеличивает p, поэтому теперь он указывает на конец arr, а затем пытается распечатать содержимое этого адреса.Там нет никакого способа узнать, что там будет.

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