vector_dinamic *creeaza_vector()
{
vector_dinamic *v=malloc(sizeof(vector_dinamic)*capacitate_initiala);
v->Element=malloc(sizeof(Elements)*capacitate_initiala);
v->lungimea=0;
v->capacitatea=capacitate_initiala;
return v;
}
这是一个动态载体,其中lungimea是长度,而capacityitatea是容量。 capcacitatea_initiala是100,这意味着我可以存储100个元素。
typedef void* Elements;
typedef struct{
Elements * Element;
int lungimea;
int capacitatea;
} vector_dinamic;
我也有这种类型的无元素,为了能够在我的向量中存储不同类型的元素,我设法做了添加,但我的问题是如何比较相同类型的两个元素,我想要实现删除功能,但我正在努力比较两个元素
typedef struct{
int numar_apartament;
int suma;
char * tipul;
} Cheltuieli;
我有这种元素类型,现在有人可以告诉我如何通过“numar_apartament”比较我的通用载体中的元素吗?
void modifica(vector_dinamic * vector, int numar_apartament)
{
int i,a=0;
for (i=0;i<vector->lungimea;i++)
{
if (vector->Element[i]->numar_apartament)==element->numar_apartament)
a=1;
}
return a;
}
这是我尝试的但是我收到了很多错误而且它不起作用......
谢谢!
答案 0 :(得分:3)
void
指针没有任何特定类型,这就是为什么它们可以指向任何东西。您必须将void
指针转换为它们指向的实际类型,以便能够取消引用它们:
((Cheltuieli *) vector->Element[i])->numar_apartament
你的括号也有问题,你错过了一个开括号。
答案 1 :(得分:1)
主要思想是将指针指向要比较的变量,并使用memcmp进行比较。 还纠正了一些编译错误,下面是修改后的代码。检查它是否有帮助!
#include "malloc.h"
#include "memory.h"
typedef void* Elements;
typedef struct{
Elements * Element;
int lungimea;
int capacitatea;
} vector_dinamic;
typedef struct{
int numar_apartament;
int suma;
char * tipul;
} Cheltuieli;
vector_dinamic *creeaza_vector()
{
int capacitate_initiala = 10;
vector_dinamic *v = (vector_dinamic *)malloc(sizeof(vector_dinamic)*capacitate_initiala);
v->Element= (Elements *)malloc(sizeof(Elements)*capacitate_initiala);
v->lungimea = 0;
v->capacitatea = capacitate_initiala;
return v;
}
int modifica(vector_dinamic *vector, int numar_apartament)
{
int i, a = 0;
Cheltuieli **tmp = (Cheltuieli **)&(vector->Element);
for (i = 0; i < vector->lungimea; i++)
{
if ((memcmp(&(tmp[i])->numar_apartament, &numar_apartament, sizeof(int)) == 0))
a = 1;
}
return a;
}