|
|
|
| Надо передать в функцию массив произвольной длины. Но длину, как переменную передавать не хочется. Разве что перед вызовом функции определить длину массива, а не хранить ее постоянно, тогда еще можно длину передать. Возможно ли такое? Элементы массива не изменяются функцией(constанты). Тип элементов - структуры. | |
|
|
|
|
|
|
|
для: alex19921992
(20.03.2007 в 05:41)
| | Вопрос, по-моему, звучит не вполне понятно, но попробую ответить.
Передавать размер массива в качестве параметра функции - вполне нормальное
решение. Это одна из идиом языка Си. Пример:
struct MyStruct
{
// my data
};
void MyFunc(const MyStruct *array, int size)
{
for (int i=0; i<size; i++)
{
// do something with array[i]
}
}
|
В духе языка C++ воспользоваться классом для массива. У этого класса обычно есть метод,
возвращающий его текущий размер.
typedef vector<MyStruct> MyArray;
void MyFunc(MyArray &array)
{
for (int i=0; i<array.size(); i++)
{
// do something with array[i]
}
}
|
| |
|
|
|
|
|
|
|
для: oleg_alexeev
(20.03.2007 в 10:13)
| | Но я где-то слышал, что можно определять длину как sizeof(массив)/размер_элемента=длина_массива | |
|
|
|
|
|
|
|
для: alex19921992
(20.03.2007 в 12:27)
| | Так делать вполне можно и нужно если компилятор имеет объявление массива
MyFunc()
{
int array[12];
for (int i=0; i < sizeof(array)/sizeof(array[0]); i++)
{
// do something
}
}
|
поскольку оператор sizeof() работает на этапе компиляции, а на этапе выполнения переменная i
будет просто сравнивается с числом 12. | |
|
|
|
|
|
|
|
для: oleg_alexeev
(20.03.2007 в 13:10)
| | То есть с динамическим массивом такой фокус не пройдёт? | |
|
|
|
|
|
|
|
для: alex19921992
(20.03.2007 в 16:07)
| | Так точно. | |
|
|
|
|
|
|
|
для: oleg_alexeev
(20.03.2007 в 16:38)
| | я вот просто пытаюсь сделать 3д движок и хранить объекты буду в очереди динамических массивов... а вот как устроены 3д-файлы Макса, майи или занозы(популярные 3д редакторы), даже не представляю... | |
|
|
|
|
|
|
|
для: alex19921992
(20.03.2007 в 17:52)
| | тож вопрос есть про массивы:
вошем обявляю массив arr[30]
дальше он заполняется значениями, к премеру в его занесется 10 значений.
так вот как мне определить колличество занесенных значений?
sizeof(массив)/размер_элемента=длина_массива - тут не катит т.к возврашает заявленную величину т.е 30
или тут стоит юзать динамические массивы... | |
|
|
|
|
|
|
|
для: nic
(22.03.2007 в 01:26)
| | Вообще, можно делать динамические массивы. Хотя можно и обойтись:
1 вариант: хранить количество занесенных элементов в отдельной переменной, чтобы во время считывания считать столько значений, сколько сказано в этой переменной.
2 вариант: подойдет, если есть такие значения, которые в массиве храниться заведомо не могут. Например, вы знаете, что заносите натуральные числа в массив. Естесственно ноль хранить нельзя. ТОгда заполняете все нулями, потом заносите значения в массив. Чтобы определить, сколько у вас переменных занесено, достаточно либо считывать, пока не получили ноль, либо посчитать сколько ненулевых значений есть в массиве. | |
|
|
|