APIを正しく使用する方法を理解するためのAPIを使用したサンプルコードを調べています。私は混乱したコードを見つけました。私の理解では、変数ハンドルがジェネリック
ヌルとしてキャストタイプとなっている変数myStruct_var(を指し、
連続したC言語のポインタキャスト
ヌル
ジェネリックポインタであるということである
typedef struct myStruct_id{
randomStruct1 var1;
void *var2;
unsigned char *var3;
randomStruct2 var4;
int var5;
}myStruct_name;
//Function Prototype
void randomFunction(const randomStruct1 *in1, const randomStruct2 *in2, void *handle);
//Global Variables
//assuming data1-5 are of the correct types corresponding to randomStruct1, void, etc.
myStruct_name myStruct_var = {data1, data2, data3, data4, data5};
void *handle = (void*)myStruct_var;
void main(){
myStruct_name *local_var = (myStruct_name *)handle;
//Other code here
local_var.var2 = randomFunction(&local_var.var1, &local_var.var4, &(local_var));
}
:以下のコードの関連チャンクですポインタ)。 main関数では、変数local_varは変数myStruct_varを指しているポインターハンドルの値(myStruct_name型へのポインターとして型キャストされている)を指すstruct myStruct_nameへのポインターです。次に、関数randomFunctionは、var1だけのポインタ、var2のポインタ、変数local_varのポインタを入力として取ります。
私の混乱は、このです:入力ポインタは構造体と
ヌル
ジェネリックポインタを指すよう機能randomFunctionが必要です。 local_varがすでにポインタの場合、アドレス演算子(&)はなぜ必要ですか? local_varの値はすでにアドレスではありませんか?または、local_varが正しくないと何が起こっているのか、私の理解ですか?
また、randomFunctionへの最後の入力がカッコである理由はありますか?つまり、なぜ& local_varではなく&(local_var)ですか?かっこは何かしていますか?
お読みいただきありがとうございます。
EDIT:nullポインタを参照していないことを示す応答に感謝します。私はを参照しています。ここでは "データタイプ"は一般的です。
ようこそスタックオーバーフロー。 [The Tour](http://stackoverflow.com/tour)を読み、[Help Center](http:// stackoverflow)の資料を参照してください。com/help/asking)ここで何をどのように聞くことができますか? –
あなたは* nullポインタのコンセプトを読んでみたいと思います。*あなたの使い方は混乱しているようです。 – tofro
_nullポインタ_定義点はどこにもありません。 'void *'と宣言するだけでは、ポインタをヌルポインタとして修飾しません。それで、どうしてタイプチェックをしないのですか?真実を必要とせずに 'void *'やキャストを使わないでください。 – Olaf