Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.17;
Скачать: 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 вся ветка

Текущий архив: 2003.07.17;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.019 c
14-55722
r0n1n
2003-06-30 00:15
2003.07.17
Чат


14-55714
Мазут Береговой
2003-07-01 19:03
2003.07.17
Притча от Мазута. Быль. 20 век.


3-55401
Ai
2003-06-23 15:46
2003.07.17
Как программно очистить базу?


8-55667
Rip
2003-03-26 13:24
2003.07.17
Регулятор звуга в проге


3-55422
victor_ch
2003-06-24 09:18
2003.07.17
При дисконнекте с SYBASE через BDE выходит реплика