AmooQ
18.02.2020 00:05

Язык с. на фотографии с комментариями решения.

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
Вероніка200419
23.08.2020 11:22

Немного теории:

Любой доступ к элементу массива, осуществляемый с операции индексирования может быть осуществлен при указателей.

Имя массива хранит адрес его нулевого элемента. Поэтому адрес любого i элемента массива можно представить как (x+i), где x - указатель на первый элемент массива. А его значение как *(x+i)

Подобные операции верны для любого типа и размера массивом, так как при прибавлении к указателю целого числа, он "сдвигается" не на i байтов, а на i элементов этого типа.

В данном задании:

int a[]= {7,8,9} - инициализация массива. По сути, это описание и присваивание значения одновременно. После выполнения этой строчки: a[0]=7; a[1]=8; a[2]=9 - массив из трех элементов, нумерация с нуля.

int *b=a -  Эта строчка переводится как "создаем переменную b типа указатель на целое и присваем ему адрес нулевого элемента массива".

*(b+2)=b+1 - очень странная запись.

*(b+2) равносильно a[2] - значение последнего элемента данного массива. Переменная b содержит целое число, которое является адресом нулевого элемента массива. b+1 - указатель "сдвигается на 1 элемент вправо", т.е (b+1) - адрес первого элемента массива.

То есть данная запись означает, что в последний элемент массива(a[2] в данном случае) записывается адрес первого элемента массива(a[1] в данном случае).

b[1] - такая запись указателя с индексом равносильна a[1] - значению первого элемента массива.

В итоге: b[1] <=> a[1]=8

Примечание:

Изначально ваша программа не выполниться, так как запись int b*=a - неверная(правильно int *b=a)

0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота