2017-03-09 8 views
0

メモリにデータがあり、そのポインタでデータを読みたい。このポインタを関数に渡すことによって、char、intなどへのvoidポインタを変更することは許されていますか? 私は意味:空のポインタを関数の引数として渡して新しいアドレス(char、int)を返す

機能 GetDataPointer
struct DataContainer { 
    char* one; 
    int* two; 
}; 

void GetDataPointer(char var, void* data_p) 
{ 
    switch(var) { 
    case 1: 
    data_p = (void*)DataContainer.one; 
    break; 
    case 2: 
    data_p = (void*)DataContainer.two; 
    break; 
} 

void main(void) 
{ 
    char* example; 
    GetDataPointer(1, (void*)example); 
} 

私はdata_pがDatacontainer.oneと同じアドレスを取得していることがわかりますが、examplemain()アドレスに変更されないことができます。

+0

'を無効メイン()' ....少なくとも、 'int main(void)'を使用してください。 –

+0

ロールバックしてください。重複する質問ではありません。 –

+0

あなたの質問を編集してください。私が今見ているように、それは重複しているからです。 –

答えて

0

ポインタへのポインタを渡す必要があります。

char **data_p 

をそして、あなたはポインタの値を設定する場合::

GetDataPointer(1, (char **) &example); 

関数宣言では、これをあげるよ

*data_p = something; 
+0

しかし、もしintポインタを取得したいのですか? –

+0

次に、共用体へのポインタを作成します。 'union {char * charptr; int * intptr; } ' – bace1000

関連する問題