2012-04-25 22 views
3

私は、構造体が定義されています:Cの構造体を無効にすると*ポインタ

Data* insert_data(int t, void* s) 
{ 
    Data * d = (Data*)malloc(sizeof(Data)); 
    d->type = t; 
    d->info = s; 

    return d; 
} 

struct { 
    ... 
} Struct#; 
:私は次の関数を使用してvoid *に割り当てるいくつかの他の構造体を持っている

typedef struct { 
    int type; 
    void* info; 
} Data; 

、その後、

その後、私はちょうど私がこれをコンパイルすると、それは警告

を与える

insert_data(1, variable_of_type_Struct#); 

を呼び出します

warning: assignment from incompatible pointer type 

私はどのように私はこの警告を取り除くことができますか?(void *型)に挿入して、変数をキャストしようとしたが、

insert_data(1, (void *) variable_of_type_Struct#); 

を動作しませんでしたか

おかげで、構造体のアドレスで

+1

コードを修正して警告を取り除くことができます。 –

+0

どこですか? – Nitrate

+0

サンプルコードを確認してください。 –

答えて

6

峠、それのコピーではなく(つまり、値によって渡されません):

insert_data(1, &variable_of_type_Struct); 
+0

それを試してみました。 insert_data(1、(void *)&variable_of_type_Struct#);いずれも動作しませんでした – Nitrate

+0

うまく動作します:http://ideone.com/rHD5f – hmjd

+0

あなたの変数はどのタイプですか?ここでキャストする必要はありません。 Provede関連の型は、私たちはあなたのtypedefの背後に隠れているものを見るためのマジシャンではありません。 回答は有効です。 – AoeAoe

5

は、構造体オブジェクトへのポインタを渡します。

struct your_struct_type bla; 

insert_data(1, &bla); 
+1

*任意のオブジェクトへのポインタ。 – AoeAoe

3

このプログラムが役立つことを願っています!

#include <stdio.h> 
#include <stdlib.h> 

typedef struct { 
    int type; 
    void* info; 
} Data; 

typedef struct { 
    int i; 
    char a; 
    float f; 
    double d; 
}info; 

Data* insert_data(int t, void* s) 
{ 
    Data * d = (Data*)malloc(sizeof(Data)); 
    d->type = t; 
    d->info = s; 

    return d; 
} 

int main() 
{ 
    info in; 
    Data * d; 
    d = insert_data(10, &in); 

    return 0; 
} 
+0

それは私が持っているものです。構造体{ ... }構造体#; 次に、私はちょうど を呼び出します。 insert_data(1、variable_of_type_Struct#);構造体*変数 – Nitrate

+0

あなたが 'struct {...}'を持っているとしたら、 'insert_data(int、struct)'ではなく 'insert_data(int、struct *)'を呼び出さなければなりません。構造体のアドレスを渡します。 –

+2

これはいいですが、ここでは初期化されていないデータを扱います。どんな種類のチェック(malloc、free)も無視します。 – AoeAoe

2

私は、これは何であったかはかなりよく分からない:だから

struct { 
    ... 
} Struct#; 

、私はあなたのプログラムを少しクリーンアップし、呼び出しに構造体のアドレスを入れた後、何の警告を得ませんでした、 void*ためinsert_data(1, &variable_of_type_Struct);

#include <stdlib.h> 
#include <stdio.h> 

typedef struct { 
    int type; 
    void* info; 
} Data; 

Data* insert_data(int t, void* s); 

Data variable_of_type_Struct; 

Data* insert_data(int t, void* s) 
{ 
    Data * d = (Data*)malloc(sizeof(Data)); 
    d->type = t; 
    d->info = s; 

    return d; 
} 

void test() 
{ 
    insert_data(1, &variable_of_type_Struct); 
} 
0

insert_data待ち、あなたはDataを置きます。

insert_data(1, &variable_of_type_Struct#); 

それは間接的なレベルを欠場します。

関連する問題