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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Копирование массива 
:(
    Опции темы
freezeman
Дата 24.4.2012, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Всем привет!

Вопрос на копейку. В функцию передаю массив, нужно вернуть результат. Нужно именно промежуточный массив x сохранить и вернуть в y!
Массивы одной размерности!
Код:
Код

bool Func(int x[], int *y[], int *R, int _i, int V, int N, std::vector<ReadFileParam> v, bool flag)
{
// всякие вычисления
    if (_F < *R || *R == -1)
    {
        *R = _F;
        // memcpy(y, x, sizeof(y)); // это не работает! Нужно скопировать x в y не по ссылке, а по значению
        Func(x, y, R, _i, V, N, v, true);
        return false;
    }
    return true;
}


Это сообщение отредактировал(а) freezeman - 24.4.2012, 20:32
PM MAIL   Вверх
disputant
Дата 24.4.2012, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(freezeman @ 24.4.2012,  20:30)

Код

bool Func(int x[], int *y[], int *R, int _i, int V, int N, std::vector<ReadFileParam> v, bool flag)
        // memcpy(y, x, sizeof(y)); // это не работает! Нужно скопировать x в y не по ссылке, а по значению

В функцию будет передан указатель, так что sizeof(y), сами понимаете, какой...

Где у вас количество элементов в массиве? N? Вот и используйте N*sizeof(int). И передавайте правильно массивы, int*y[] не нужен.

Вот микропример программы, разберетесь...

Код

#include <iostream>
#include <mem.h>

using namespace std;

int x[] = { 1, 2, 3, 4, 5, 6};
int y[] = { 0, 0, 0, 0, 0, 0};

void ccc(int x[], int y[])
{
    memcpy(y,x,6*sizeof(int));
    for(int i = 0; i < 6; ++i)
        cout << y[i] << endl;
}


int main(int argc, const char * argv[])
{
    ccc(x,y);
}



PM MAIL   Вверх
alexvs11
Дата 24.4.2012, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


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

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



массивы передаются по ссылке, те
freezeman, sizeof(y) возвращает размер указателя
должно быть чтото вроде
memcpy (y, x, sizeof(int) * count);
PM MAIL   Вверх
freezeman
Дата 24.4.2012, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(disputant @ 24.4.2012,  21:42)
И передавайте правильно массивы, int*y[] не нужен.

Спасибо за ответ! Я уже разобрался, в передаче массива y и была проблема! ;)

Вот ещё проблема появилась, буду благодарен за помощь:
Код

struct ReadFileParam
{
    HANDLE hFile;
};
int _tmain(int argc, _TCHAR* argv[])
{
    std::vector<ReadFileParam> vect;
    ReadFileParam p1;
    p1.szName = TEXT("C:\\1.txt"); // ВЫДАЕТ ОШИБКУ - невозможно преобразовать "const wchar_t [9]" в "TCHAR [261]"
    vect.push_back(p1); // заношу в вектор
}


Добавлено через 5 минут и 22 секунды
Цитата(alexvs11 @ 24.4.2012,  21:43)
массивы передаются по ссылке, те
freezeman, sizeof(y) возвращает размер указателя
должно быть чтото вроде
memcpy (y, x, sizeof(int) * count);

Спасибо, но так не пашет! Я пробовал...

Это сообщение отредактировал(а) freezeman - 24.4.2012, 22:14
PM MAIL   Вверх
alexvs11
Дата 24.4.2012, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


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

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



Цитата(freezeman @  24.4.2012,  22:14 Найти цитируемый пост)
Спасибо, но так не пашет! Я пробовал...

массивы всегда передаются по ссылке, а не по значению - так что это не может не работать
PM MAIL   Вверх
freezeman
Дата 24.4.2012, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(alexvs11 @ 24.4.2012,  22:27)
Цитата(freezeman @  24.4.2012,  22:14 Найти цитируемый пост)
Спасибо, но так не пашет! Я пробовал...

массивы всегда передаются по ссылке, а не по значению - так что это не может не работать

Я сделал так:

Код

memcpy(x, y, sizeof(int)*sizeof(x)); // в итоге получаю пороговые значения (-38......)

PM MAIL   Вверх
alexvs11
Дата 24.4.2012, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


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

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



и в чем смысл?
Цитата

memcpy(x, y, sizeof(int)*sizeof(x));

sizeof(x) по правилам си возвращает размер int*
что должно получится при умножении размера int на размер int*?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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