alex4answ
@alex4answ

Почему функция меняет значения переданной переменной?

Добрый день, я чего-то не могу понять, совсем.

есть функция:
void shift(int a[], unsigned size, int shift) {

	for (int j = 0; j < shift; j++) {
		int tmp = a[size - 1];
		for (int i = 0; i < size; i++) {
			int current = a[i];

			a[i] = tmp;
			tmp = current;
		}
	}
}

Она сдвигает циклично массив, то есть:
int a[5] = {1, 2, 3, 4, 5};

unsigned size = 5; // просто чтобы было удобно показать здесь.

shift(a, size, 2); // в жизни я не передаю размер массива абсолютным значением


В итоге, переданный массив изменяется, не его копия, а сам массив, почему?

Я догадываюсь что дело в том, что массив - не просто переменная, а объект, и когда мы его передаем в функцию, мы передаем не его копию, а ссылку на объект, даже когда не используем указатели, я прав?
  • Вопрос задан
  • 120 просмотров
Решения вопроса 1
@pfemidi
Тут могло бы быть краткое описание меня
Да, именно так, передаётся не копия массива, а указатель на оригинал. Естественно оригинал и меняется.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Daniro_San
@Daniro_San
Программист
Дело в том что в C++ нельзя передать массив по значению. Когда вы пишете void f(int arr[]), это тоже самое что void f(int *arr).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы