C如何比较2种未知类型的元素

时间:2013-03-18 09:45:00

标签: c equality

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;

}

这是我尝试的但是我收到了很多错误而且它不起作用......

谢谢!

2 个答案:

答案 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;

}