Передача массива в функцию. C++

126
20 августа 2019, 09:30

Насколько я знаю, если вызвать int array[500] например в std::cout << array;, то я получу адрес первого элемента массива. Соотвественно std::cout << *array; выведет значение первого элемента. Когда я отправляю в функцию void foo (int *array){} Тут я получается говорю, что нужно принять адрес? А не первый элемент массива. P.S как получается так, что мы отправляем адрес первого элемента массива, а при этом можем работатЬ со всем массивом в функций foo

Answer 1

По адресу первого элемента массива можно получить адрес второго, третьего и остальных элементов массива. Это называется адресной арифметикой. Поэтому получая в функции указатель на первый элемент массива мы можем внутри этой функции получить доступ и к остальным элементам массива.

Реализации языка С++ имеют право придерживаться целого набора относительно сложных правил, объясняющих, какие указатели разрешается формировать на основе каких других указателей (через адресную арифметику). Ответы на такие вопросы могут существенно влиять на оптимизацию кода. Получать указатель на элемент массива из указателя на другой элемент этого же массива - это разрешенное действие.

Answer 2

Это основы си, изложенные Керниганом и Ричи. Причём не сразу понял, что когда вызываешь функцию, передавая массив не с помощью звёздочки, а с помощью квадратных скобок с размером массива в них, происходит то же самое, на стеке ничего не выделяется свыше размера указателя на первый элемент. До сих пор возмущаюсь, зачем тогда писать размер в квадратных скобках?

READ ALSO
Оптимизация работы с памятью в С++

Оптимизация работы с памятью в С++

решил написать свойobj парсер, и столкнулся с небольшой проблемой

119
Работа заголовочных файлов

Работа заголовочных файлов

Возможно вопрос покажется глупым, но я новичок в работе с С++

103