Говорят что в С++ нельзя передать массив по значению в функцию, тогда объясните что делает мой кусок кода: `
void f3(int A)
{
(&A)[3] = 45;
cout << (&A)[3] << endl;
}
int main()
{
setlocale(LC_ALL, "ru");
int A[5];
f3(*A);
cout << A[3]<<endl;
system("pause");
return 0;
}
Ваш код передает в функцию значение нулевого элемента массива А. Далее, как тут уже сказали, у Вас будет неопределенное поведение и скорее всего затрется память.
Говорят что в С++ нельзя передать массив по значению в функцию
Передать массив по значению в С++ вполне можно (но, как правило, не нужно). Например так:
struct a{
int b[10];
};
void f3(a A){
A.b[3] = 45;
cout << A.b[3] << endl;
}
В этом случае в стеке создается копия структуры типа "a" и массива "b" в ней. В этой копии модифицируется третий элемент массива "b". После выхода из функции копия структуры, созданной в стеке (и соответственно копия массива в которой модифицировался третий элемент) теряется.
UPD1:
UPD1 удалено как ошибочное. Желающие могут посмотреть в правках.
UPD2:
Действительно, как подсказывает коллега HolyBlackCat, все равно передается только указатель на массив. Значит без структуры или класса не получится передать массив в функцию по значению. Это потому, что у массива нет конструктора копирования по умолчанию, а трансляторы теперь умные стали. А у структуры или класса есть конструктор копирования по умолчанию (побайтовое копирование).
Выражение (&A)[3] = 45; берет адрес локальной переменной и записывает по нему значение 45 со смещением 3, что является Неопределенным Поведением. Соответственно что реально произойдет - неизвестно. Зато однозначно известно, что тут нет никакой передачи массива.
Продвижение своими сайтами как стратегия роста и независимости