この配列「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 *ある必要があることを警告します。intint *
のタイプをr->phy_addrに変更しint *ます。
ありがとう。
どうですか:
add(*(r->phy_addr[0]));
? どうやらr->phy_addr[0]はポインターであるためです。