2013-03-18 60 views
0
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是长度,capacitatea是容量。 capcacitatea_initiala是100,这意味着我可以存储100个元素。C如何比较未知类型的2个元素

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

把整个代码。你的问题的原因可能来自其他地方。 – MOHAMED 2013-03-18 09:53:44

+0

我想,阅读西班牙语的代码有点困难。 – Alex 2013-03-18 09:54:05

+0

与您的问题无关,但“a = 1;”第一盘后再也不会改变,所以你可以“休息”。在你第一次比赛的时候出于“for”。 – 2013-03-18 09:54:54

回答

3

void指针没有任何特定的类型,这就是为什么他们可以指向任何东西。你必须投void指针,它们指向的实际类型,才能够取消引用它们:

((Cheltuieli *) vector->Element[i])->numar_apartament 

也有括号,你缺少一个左括号问题。

+0

谢谢,先生! – JackRobinson 2013-03-18 10:09:54

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; 

} 
+0

谢谢先生! – JackRobinson 2013-03-18 10:08:15