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

Вишенка200523 Вишенка200523    2   16.12.2019 16:13    0

Ответы
fizaliya1992 fizaliya1992  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)

ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика