Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Копирование массива


Автор: freezeman 24.4.2012, 20:30
Всем привет!

Вопрос на копейку. В функцию передаю массив, нужно вернуть результат. Нужно именно промежуточный массив 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;
}

Автор: disputant 24.4.2012, 21:42
Цитата(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);
}



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

Автор: freezeman 24.4.2012, 22:14
Цитата(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);

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

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

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

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

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

Я сделал так:

Код

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

Автор: alexvs11 24.4.2012, 22:45
и в чем смысл?
Цитата

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

sizeof(x) по правилам си возвращает размер int*
что должно получится при умножении размера int на размер int*?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)