![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Dmitriy2k |
|
|||
![]() шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 6.11.2005 Репутация: нет Всего: нет |
Подскажите, можно ли передать копию массива в функцию?
т.е. обычно мы передаем в функцию как бы указатель на первый элемент массива и выглядит это так: FuncArray(int arr[][20]){ ... } main() { int a[2][20]; FuncArray(a); } мне же нужно чтобы передавалась в функцию копия массива, чтобы можно было в функции изменять значения элементов, не повреждая исходный массив. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Это сообщение отредактировал(а) bsa - 30.3.2008, 11:40 |
|||
|
||||
| Dennnis |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 23.3.2008 Репутация: нет Всего: 4 |
или
Это сообщение отредактировал(а) Dennnis - 30.3.2008, 11:39 --------------------
Get Rich or Die Tryin' |
||||
|
|||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Dennnis, во втором случае передачи идет по ссылке, по сути, тоже самое, что по указателю.
|
|||
|
||||
| Dennnis |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 23.3.2008 Репутация: нет Всего: 4 |
Ты имеешь ввиду надо так:
--------------------
Get Rich or Die Tryin' |
||||
|
|||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Dennnis, да. Теперь уже передача по значению.
|
|||
|
||||
| Dmitriy2k |
|
|||
![]() шустрый ![]() Профиль Группа: Участник Сообщений: 96 Регистрация: 6.11.2005 Репутация: нет Всего: нет |
Мне не очень понятно что означают угловые скобки. Я сколько писал на Си ни разу не встречал :( [quote] |
|||
|
||||
| bsa |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Это С++. std::vector - это шаблон динамического массива. В этой строчке, в частности, создание массива массивов int. |
||||
|
|||||
| Rififi |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 11 Всего: 36 |
массив не является указателем на первый элемент а неявно приводится к нему компилятором. вот пример функцмии, в который передаётся сам массив, без потери информации о типе.
|
||||
|
|||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Rififi, читаем вопрос Dmitriy2k внимательно - речь идет о языке Си
|
|||
|
||||
| Rififi |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 11 Всего: 36 |
bsa,
а чего тогда ему советуют вектор? Для Си кроме отсутствия ссылочного типа ничего не меняется void f(int (*arr)[10]) { printf("%d элементов.\n", sizeof(*arr) / sizeof((*arr)[0])); } int arr[10]; FuncArray(&arr); |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Rififi, ты ему предлагаешь передать по указателю, а ему нужно по значению
|
|||
|
||||
| Rififi |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 11 Всего: 36 |
чтобы передать "массив по-значению", нужно чтобы он был lvalue и/или имел конструктор копирования.
а массив, как известно, не является lvalue, зато является POD-типом, следовательно, запрашиваемое в исходном вопросе невозможно. |
|||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
||||
|
||||
| Graf_h |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 482 Регистрация: 18.10.2007 Где: г. Ровно, Украина Репутация: 2 Всего: 5 |
Это честно говоря глупо -------------------- Иногда переменная - это просто переменная |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |