Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> передача массива в ф-цию 
V
    Опции темы
XbiT
Дата 3.2.2007, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 9.2.2006

Репутация: нет
Всего: 1



Как передать копию массива в ф-цию? т.е что бы его можно было менять внутри ф-ции, но это не влеяло на реальный массив.
Пробовал такой вариант, но он меняет значения реального массива:
Код

#include <iostream>
using namespace std;

void f(int b[])
{
    for (int i = 0; i < 5; ++i)
    {
        ++b[i];
    }
}

int main()
{
    int a[] = {1, 2, 3, 4, 5};
    
    f(a);

    for (int i = 0; i < 5; ++i)
    {
        cout << a[i] << endl;
    }
}

PM MAIL   Вверх
Kuvaldis
Дата 3.2.2007, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 11
Всего: 61



XbiT, 
Одной строчкой в параметрах так сделать нельзя, так как имя массива - это в любом случае указатель
Выход:
1. Используем std::vector из STL
Код

#include <iostream>    
#include <vector>
using namespace std;
    
void f(vector<int> b)    
{    
    for (int i = 0; i < 5; ++i)    
    {    
        ++b[i];    
    }    
}    
int main()    
{    
    int  i;
    vector<int> a(5);

    cout << "Before" << endl;
    for (i = 0; i < 5; i++)
    {
        a[i] = i + 1;
        cout << a[i] << endl;
    }    
    f(a);
    
    cout << "After" << endl;
    for (i = 0; i < 5; ++i)    
    {    
        cout << a[i] << endl;    
    }    

    return 0;
}

Т.е. в данном случае используем ООП и возможность передачи по ссылке или значению
ИМХО, лучший вариант. С vector работай как с массивом

2. Внутри твоей функции f() ручками (т.е. в цикле) сделать копию массива 

Это сообщение отредактировал(а) Kuvaldis - 3.2.2007, 16:43


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
XbiT
Дата 3.2.2007, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 9.2.2006

Репутация: нет
Всего: 1



Kuvaldis, cпасибо
PM MAIL   Вверх
ip127001
Дата 4.2.2007, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 24.11.2006
Где: Omsk

Репутация: -2
Всего: -1



странно...он должен создавать локальную копию
с переменной полюбому будет работать---1 пост!
--------------------
aqua currit et debere currere ut currere solebat
PM MAIL   Вверх
Kuvaldis
Дата 4.2.2007, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 11
Всего: 61



ip127001, 
Цитата

странно...он должен создавать локальную копию

Создается локальная копия УКАЗАТЕЛЯ, который указывает на ту же область памяти. И работа в функции идет именно с первоначальной областью. Автор же хочет именно дубликат (!) массива (т.е. его копию В ДРУГОМ месте)


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
Anikmar
Дата 4.2.2007, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Самое простое воспользоваться STL, как уже прелагалось выше.
Можно написать сосбственный класс с конструктором копирования...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0468 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.