#c #oop #data-structures
#c #ооп #структуры данных
Вопрос:
я должен хранить данные, как показано в этом ->
я хочу, чтобы интерфейс, подобный set_data(data_id, index, data)
, записывал данные в таблицу и get_data(data_id,index)
считывал данные из таблицы
я должен реализовать это в коде c.
нужна некоторая логическая помощь для написания кода.
как это можно сделать, используя структуры в c.
хотите реализовать что-то вроде этого.
struct INDEX
{
U8 Len;
U8 data[];
};
struct DATA_ID
{
struct INDEX index[];
};
struct DATA_ID data_id[max];
data[]
длина варьируется для каждого индекса и
index[]
длина варьируется для каждого data_id
Комментарии:
1. У вас есть какие-либо идеи, как это написать, или это вопрос «пожалуйста, дайте мне код»?
2. Понимание динамического распределения памяти языка C поможет вам.
3. Просто реализуйте как единую структуру (
struct collection { size_t group_id, index; double data };
), а затем выделите такой большой блок, какой вам нужен, напримерstruct collection *mycollection = malloc (how_many * sizeof *mycollection);
)
Ответ №1:
Для динамического выделения памяти вам необходимо использовать malloc.
Один совет для вас: каждый раз, когда вы хотите инициализировать тип данных неизвестной длины (размера), вероятно, хорошей идеей будет использовать malloc . Единственным другим решением было бы использовать достаточно большой тип данных для инициализации неизвестного типа данных, но это просто тратит впустую память, а часто и производительность.
Скопировано изhttps://www.tutorialspoint.com/c_standard_library/c_function_malloc.htm
#include <stdio.h>
#include <stdlib.h>
int main () {
char *str;
/* Initial memory allocation */
str = (char *) malloc(15);
strcpy(str, "tutorialspoint");
printf("String = %s, Address = %un", str, str);
/* Reallocating memory */
str = (char *) realloc(str, 25);
strcat(str, ".com");
printf("String = %s, Address = %un", str, str);
free(str);
return(0);
}
Вывод:
String = tutorialspoint, Address = 355090448
String = tutorialspoint.com, Address = 355090448
Комментарии:
1. Приведение вызова malloc не имеет смысла. И вам действительно следует добавить sizeof (char) в свой malloc, чтобы избежать проблем с различными системами.
2. Это учебное пособие, его цель — быть простым. Кстати. Цель malloc — выделить достаточно памяти для хранения строки str длиной 15 байт.
3. Да, но в некоторых системах возможно, что размер символа не равен 1 байту напрямую, поэтому вам следует добавить sizeof в вызов malloc. Я также не говорил, что у malloc не было цели, но приведение его вызова есть.