Я новичок в C, но сейчас я работаю над проектом, который я не могу решить, как я могу делать то, что необходимо.Имитация array_pop для различных структур в C
У меня есть 2 разных массива struct, они совершенно разные, и я пытаюсь сделать то же самое действие, что и массив array_pop PHP, т. Е. Удалить последний элемент структуры массива.
Я знаю, что могу создать 2 отдельные функции, по одному для каждого типа структуры, но, очевидно, это не лучшая идея, поэтому мне интересно, возможно ли, что я могу передать либо тип структуры в одну функцию, и, возможно, флаг , а флаг определяет тип структуры, к которой он должен быть привязан.
Мои структуры определены следующим образом
typedef struct CallLogSearchResultStruct
{
long date;
int dRowIndex;
} callLogSearchResultStruct;
typedef struct CallLogSearchDataStruct
{
char * date;
char * time;
char * bParty;
char * aParty;
float duration;
char * cleardownCause;
struct CallLogSearchOutboundStruct * outboundLegs;
} callLogSearchDataStruct;
Ниже, как структуры инициализируются
callLogSearchData = calloc(numRows, sizeof(callLogSearchDataStruct));
callLogSearch = calloc(numRows, sizeof(callLogSearchResultStruct));
numRows
является количество структур, чтобы содержать в массиве.
Ниже, как я использую структуры
callLogSearchData[dataRow].aParty = NULL;
callLogSearchData[dataRow].bParty = NULL;
callLogSearchData[dataRow].cleardownCause = NULL;
callLogSearchData[dataRow].date = NULL;
callLogSearchData[dataRow].time = NULL;
callLogSearchData[dataRow].outboundLegs = NULL;
Извиняюсь, если это простой прямой ответ, я не могу найти что-нибудь на Google, хотя и не совсем уверен, что это будет называться так может быть, я используя неправильные ключевые слова.
Спасибо за любую помощь, которую вы можете предоставить.
Я знаю, что это помечено как «c», но может быть полезно использовать шаблоны C++ в случае, если у вас есть доступ к компилятору C++. Шаблоны предназначены для такого рода проблем. –
Для массивов C, созданных с помощью 'calloc',' malloc' и т. Д., Вы не можете «удалить» последний элемент в массиве без выделения нового массива и копирования всего, кроме последнего элемента, если только «удалить», вы просто хотите скопировать объект из другого места, а затем пометить запись в массиве как пустую/неиспользуемую в некотором роде ... – twalberg