Вниз
Скачать: CL | DM;

Массивы в Си   Найти похожие ветки 

← →
VEG ©   (2003-06-29 12:04) [0]

В Delphi можно было изменять размер массива и после инициализации:
m: array of integer;
i: integer;
for i:=0 to 100 do
begin
SetLength(m, i+1);
m[i]:=i;
end;
Однако в Си такой возможности я не нашел:
int i = 0;
int* m = new int[i+1];
for (i = 0; i<100; i++)
{
//???
m[i]=i;
}
Может я все-таки плохо искал, или каждый раз обязательно нужно удалять массив ф-ией delete, предварительно скопировав его содержимое в другой массив, больший на единицу, а потом наоборот???


← →
[NIKEL] ©   (2003-06-29 12:57) [1]

почитай про стандартные функции malloc и realloc


← →
Тих   (2003-06-29 13:03) [2]

А лучше не используй malloc и realloc, а подключи stl-евский vector.


← →
VEG ©   (2003-06-29 17:15) [3]

Спасибо! Нашел документации!


← →
VEG ©   (2003-06-29 19:26) [4]

Возникли трудности. Имеется такая структура:
struct {
char Name[32];
char Comm[32];
struct {
enum ibs {i, b, s};
char Name[32];
ibs Type;
union {
int i;
bool b;
char s[64];
} Value; // union Value
} Values[]; // struct Values[]
} Groups[]; // struct Vroups[]

Как видите, в самой структуре есть динамический массив Values[]. Структура Groups[] тоже является динамическим массивом. Изменять ее размер весьма неудобно функцией realloc, т.к. размер внутреннего массива меняется, т. е. приходится все размеры пересчитывать вручную, а это очень много кода. Неужели в Си нет аналога дельфийского SetLength???


← →
Тих   (2003-06-29 21:19) [5]

Это хакерский код? ;-) А отчего бы сперва по-человечески не объявить typedefы, навроде

typedef enum ibs {
i, b, s
};

и т.п, а потом уж из "кирпичей" структуры посложнее не строить?


← →
VEG ©   (2003-06-29 22:31) [6]

>Тих
Хочется компактнее:)


← →
Fantasist   (2003-06-30 08:24) [7]


> Хочется компактнее:)


А в результатет код тяжело читать. Неужто места для пару лишних десяток байт не хватает?


> к. размер внутреннего массива меняется, т. е. приходится
> все размеры пересчитывать вручную, а это очень много кода


Используй std::vector. В нем уже все реализованно.


← →
VEG ©   (2003-06-30 11:29) [8]

Страуструп не рекомендует таким образом массивы создавать, мол это не эффективно и не удобно. Он советует на основе этих самих векторов написать класс матрицы линеаризовав ее представление. У его описан неплохой пример, но я его не могу найти...


← →
VEG ©   (2003-06-30 16:44) [9]

Нет ли у кого доки про такую реализацию?


← →
k-man ©   (2003-06-30 17:18) [10]

2VEg
А ты совсем что ли на С перешел. Я например совмещаю Delphi
и C++.


← →
k-man ©   (2003-06-30 17:19) [11]


> и C++.

и VC++


← →
Fantasist.   (2003-06-30 19:23) [12]


> Страуструп не рекомендует таким образом массивы создавать,
> мол это не эффективно и не удобно


Он говорил о матрице типа: vector< vector<Type> >. У тебя же:


union TVal{
int i;
bool b;
char s[64];
}

struct TVar{
enum ibs {i, b, s};
char Name[32];
ibs Type;
TVal Value;
}

struct TData{
char Name[32];
char Comm[32];
std::vector<TVar> Values;
}

std::vector<TData> Groups;


Лениаризововать тут нечего.


← →
VEG ©   (2003-06-30 20:31) [13]

>Fantasist.
Понятно. Спасибо! Только доки найти трудно по этому поводу - левых векторов много:)
>k-man
Практически да, но это временно.
>Я например совмещаю Delphi и C++.
В одном проекте? Через DLL?


← →
VEG ©   (2003-06-30 20:32) [14]

Я бы не прочь эту байду (модуль) переписать на Delphi, но только при условии, что он нормально подключится к моему Сишному проекту, и без DLL!


← →
k-man ©   (2003-06-30 21:22) [15]


> В одном проекте? Через DLL?

Нет. У меня три(сам удивляюсь) проекта. Стараюсь везде успевать. Хотя сложно.
Просто уж проекты очень интересные и разные.


← →
Fantasist.   (2003-06-30 21:30) [16]


> Я бы не прочь эту байду (модуль) переписать на Delphi, но
> только при условии, что он нормально подключится к моему
> Сишному проекту, и без DLL!



Переходи на .NET :).



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.013 c
3-55422
victor_ch
2003-06-24 09:18
2003.07.17
При дисконнекте с SYBASE через BDE выходит реплика


4-55909
fishca
2003-05-06 17:33
2003.07.17
OLE Automation & Win32API


1-55624
Franzy
2003-07-03 19:57
2003.07.17
Создание своих компонент - технический вопрос


14-55831
Prov
2003-07-01 16:41
2003.07.17
Что с рассылкой ?


14-55811
Леприкон
2003-07-01 08:20
2003.07.17
Как то бы нужно задать пароль...




   Наверх