есть ф-ция. которая создает символьный двумерный массив.как заставить её возвращать его в исходную программу?я так понимаю с помощью указателя?но как это реализовать?
(в Си)
Спасибо заранее!
Возврат массива функцией
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Не бейте сильно я только учусь!:)
Ttype ** tmp = new Ttype* [n]; // наш массив
for (int i=0;i<n;++i){tmp=new Ttype ;}; /* заполнение массива (n и m соответственно размерность )*/
//остальной код ...
return tmp ;// возврат массива функция соответствующего типа
for (int i=0;i<n;++i){tmp=new Ttype ;}; /* заполнение массива (n и m соответственно размерность )*/
//остальной код ...
return tmp ;// возврат массива функция соответствующего типа
Функция должна возвращать не только указатель но и размерности массива
например так
char** fun(int* x, int *y) //x,y -размерности
например так
char** fun(int* x, int *y) //x,y -размерности
Функция должна возвращать не только указатель но и размерности массива
например так
char** fun(int* x, int *y) //x,y -размерности
{
char** mas;
*x=10; *y=14//вычислили необходимые размеры
malloc(mas, *x)//давно на С не писал, может malloc по другому маленько
for (int i=0; i<*x; i++)
malloc(mas, *y);
//теперь можно работать с mas[j]
return mas;
}
}
например так
char** fun(int* x, int *y) //x,y -размерности
{
char** mas;
*x=10; *y=14//вычислили необходимые размеры
malloc(mas, *x)//давно на С не писал, может malloc по другому маленько
for (int i=0; i<*x; i++)
malloc(mas, *y);
//теперь можно работать с mas[j]
return mas;
}
}
- FLOODkOFF
- Сообщения: 4
- Зарегистрирован: 30 авг 2007, 21:32
- Откуда: Санкт-Петербург
- Контактная информация:
shurkaox писал(а):Функция должна возвращать не только указатель но и размерности массива
например так
char** fun(int* x, int *y) //x,y -размерности
{
char** mas;
*x=10; *y=14//вычислили необходимые размеры
malloc(mas, *x)//давно на С не писал, может malloc по другому маленько
for (int i=0; i<*x; i++)
malloc(mas, *y);
//теперь можно работать с mas[j]
return mas;
}
}
немного не так с маллоками.
Код: Выделить всё
char** fun(int* x, int *y)
{
int i;
char** mas;
*x=10; //вычислили необходимые размеры
*y=14;
mas = (char **) malloc(*x);
for (int i=0; i<*x; i++)
mas[i] = (char *) malloc(*y); //теперь можно работать с mas[i][j]
return mas;
}
т е выходит вернуть можно только указатель на массив динамической памяти т к обычный массив будет работать только в пределах ф-ции?
Спасибо всем за ответы, немного разобрался!
Спасибо всем за ответы, немного разобрался!
Не бейте сильно я только учусь!:)
-
- Сообщения: 1213
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
Тебе нужен двухмерный массив строк или же одномерный массив строк, при этом ты имел в виду что каждая строка это одномерный массив char'ов?Тыква писал(а):т е выходит вернуть можно только указатель на массив динамической памяти т к обычный массив будет работать только в пределах ф-ции?
Спасибо всем за ответы, немного разобрался!
По поводу памяти - да, локальные массивы хранятся в стеке выше адреса возврата из функции которую туда поместила инструкция call. При выходе из функции по инструкции ret массив оказывается ниже верхушки стека, в той памяти которую использовать никак нельзя.
2B OR NOT(2B) = FF
Неточность. При выделении памяти надо учитывать размер элемента массива. Учитывая, что в данном случае - сперва массив указателей, затем массив int-ов, то этот момент существенен:FLOODkOFF писал(а):немного не так с маллоками.Код: Выделить всё
*x=10; //вычислили необходимые размеры *y=14; mas = (char **) malloc(*x); // <- [b]здесь ОШИБКА[/b] for (int i=0; i<*x; i++) mas[i] = (char *) malloc(*y); // <- [b]здесь ОШИБКА[/b] return mas; }
Код: Выделить всё
*x=10; //вычислили необходимые размеры
*y=14;
mas = (char **) malloc( (*x) * [b]sizeof (char *)[/b]); // <- [b]вот так верно[/b]
for (int i=0; i<*x; i++)
mas[i] = (char *) malloc ( (*y) * [b]sizeof (int)[/b]); //<- [b]вот так верно[/b] return mas;
}
Код: Выделить всё
int* fun(int* xSize, int *ySize) //xSize, ySize -размерности
{
int* mas;
*xSize=10; *ySize=14//вычислили необходимые размеры
mas = new int [(*xSize) * (*ySize)]
return mas;
};
mas [(i * xSize) + j]