Присвоить предыдущему элементу массива значение переменной - C (СИ)
Формулировка задачи:
Присвоить предыдущему элементу массива p значение переменной yj и переадресовать указатель pv на этот элемент.
что не верно? *(pv-1)=yj;*pv--;
Решение задачи: «Присвоить предыдущему элементу массива значение переменной»
textual
Листинг программы
#include <stdio.h>
int main() {
int array[] = {1, 2, 3, 4, 5};
int yj = 7;
int* pv = &array[1];
printf("%p\n", pv); // 0xbfa83838
// array[0] теперь равно yj
*(pv - 1) = yj;
// теперь pv указывает на array[0]
*pv--;
printf("%p\n", pv); // 0xbfa83834, как и должно быть (0xbfa83838 - sizeof(int))
printf("%d\n", *pv); // 7, как и должно быть
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Объявлен массив
arrayс пятью элементами и переменнаяyjсо значением 7. - Указатель
pvинициализирован адресомarray[1](второй элемент массива). - Выводится адрес
pv(второй элемент массива) в форматеprintf(%p\n, pv);. - Значение
array[0]присваивается переменнойyjс помощью оператора индиректного обращения к массиву*(pv - 1) = yj;. - Указатель
pvинкрементируется на 1 (*pv++;). - Выводится адрес
pv(теперь он указывает наarray[1]) в форматеprintf(%p\n, pv);. - Выводится значение
*pv(теперь этоarray[1]) в форматеprintf(%d\n, *pv);. - Возвращается 0, чтобы завершить программу.
В результате выполнения этого кода, значение
array[0]будет равно 7, а значениеarray[1]будет равно 2.