この配列「r->phy_addr」を次のように定義しています。
int array [r->numpgs];
r->phy_addr= &array[0];
ここで、配列の要素0を、引数として「int」をとる関数に渡します。
add(int x){};
私がこれが好きなら
add(r->phy_addr[0]);
次に、「ポインタをintとして渡すことができない」というエラーが発生します。
どうすればいいですか?
コンパイラーがr->phy_addr[0]
ポインターのベンジについて文句を言う場合は、ポインターr->phy_addr
からポインターへのタイプが必要です(int **
ほとんどの場合)。その場合、問題はさらに早く始まります。これ
r->phy_addr = &array[0];
オブジェクトint *
に値を割り当てているため、はすでに無効です。int **
コンパイラはそれについてあなたに告げるべきでした。
言い換えれば、への呼び出しadd
は問題ではありません。への呼び出しを忘れてくださいadd
。その呼びかけを見るのは時期尚早です。その前に解決しなければならない他の問題があります。
何r->phy_addr
ですか?タイプがあるはずint **
ですか?もしそうなら、なぜあなたはそれを上記のように割り当てるのですか?その無効な割り当てによってトリガーされたコンパイラ診断メッセージを無視するのはなぜですか?
試し てみadd(*(r->phy_addr[0]));
てください
r->phy_addr にはint **
型があると思われます。r->phy_addr[0]
型を取得すると、コンパイラは、引数は型ではなく型でint *
ある必要があることを警告します。int
int *
のタイプをr->phy_addr
に変更しint *
ます。
ありがとう。
どうですか:
add(*(r->phy_addr[0]));
? どうやらr->phy_addr[0]
はポインターであるためです。