2016-09-01 4 views
0

実行可能かどうかわかりませんが、CレベルのコードをJavaコードに戻すために関数ポインタをlongにキャストする必要があります。longへの関数ポインタのキャスト

+1

あなたはあなたのコードを投稿してもらえますか? –

+0

私は長い間、ポインタを機能させることはできませんでした。 – Bionix1441

+0

未定義の動作:_Aポインタが、参照された型(6.3.2.3)と互換性のない型を呼び出すために使用されました_ –

答えて

2

ポインタの値は整数であり、正確に何をしているのかを知り、ポインタの値を格納するのに十分な記憶域を割り当てるだけで済みます。 (32ビットOSではポインタが32ビット記憶域を占有し、64ビットOSではポインタが64ビット記憶域を占有する)。

A C例:

#include <stdio.h> 

void fun() 
{ 
    printf("fun\n"); 
    return; 
} 

typedef void (*fun_type)(); 

int main() 
{ 
    long long int a = (long long int)fun; 

    fun_type func_point = (fun_type)a; 

    func_point(); 
    return 0; 
} 
+0

'long long int 'をポインタにキャストする、またはその逆にキャストすると、特定の32ビットコンパイラで警告が発行されます。正しい方法は、それらを['intptr_t'](http://stackoverflow.com/a/6543455/3448419)にキャストすることです。 – apangin

関連する問題