Ниже приведен фрагмент из книги C Программирование Просто ответы на часто задаваемые вопросы. Разве это не так, потому что массивы никогда не могут быть переданы по ссылке?Передача массива функции по значению
VIII.6: Как вы можете передать массив функции по значению?
Ответ: Массив может быть передан в функцию по значению путем объявления в вызываемой функции имя массива с помощью квадратных скобок (
[
и]
) , прикрепленных к концу. При вызове функции просто передайте вызываемой функции массив (то есть имя массива) . Например, следующая программа передает массив соx[]
к функции с именемbyval_func()
по значению:Параметр
int[]
говорит компилятору, что функцияbyval_func()
будет принимать один аргумент- в массив целых чисел. Когда функцияbyval_func()
называется, вы передать адрес массиваbyval_func()
:byval_func(x);
Поскольку массив передается по значения, точная копия массива сделаны и размещены на стек. Затем вызываемая функция принимает эту копию массива и может распечатать его. Поскольку массив передается
byval_func()
является копией исходного массива, модифицируя массив в функцииbyval_func()
не имеет никакого влияния на исходный массив.
Это верно для structs - вы можете передавать их по значению (по стеку) или по ссылке, но не для массивов. – sinelaw
Это в книге о C, правда? Я вижу, что это датируется 1995 годом, но тогда это было уже неправильно. –
Если это то, что говорится в книге, вам нужно отбросить книгу - она содержит серьезную дезинформацию по основной проблеме, и кто знает, какая другая дезинформация о других проблемах. Последний цитируемый абзац абсурд - если вы изменяете массив в вызываемой функции, вы также изменяете массив в вызывающей функции, потому что массивы не передаются по значению в C. –