2

この配列「r->phy_addr」を次のように定義しています。

int array [r->numpgs];
r->phy_addr= &array[0];

ここで、配列の要素0を、引数として「int」をとる関数に渡します。

add(int x){};

私がこれが好きなら

add(r->phy_addr[0]);

次に、「ポインタをintとして渡すことができない」というエラーが発生します。

どうすればいいですか?

4

4 に答える 4

3

コンパイラーがr->phy_addr[0]ポインターのベンジについて文句を言う場合は、ポインターr->phy_addrからポインターへのタイプが必要です(int **ほとんどの場合)。その場合、問題はさらに早く始まります。これ

r->phy_addr = &array[0];

オブジェクトint *に値を割り当てているため、はすでに無効です。int **コンパイラはそれについてあなたに告げるべきでした。

言い換えれば、への呼び出しaddは問題ではありません。への呼び出しを忘れてくださいadd。その呼びかけを見るのは時期尚早です。その前に解決しなければならない他の問題があります。

r->phy_addrですか?タイプがあるはずint **ですか?もしそうなら、なぜあなたはそれを上記のように割り当てるのですか?その無効な割り当てによってトリガーされたコンパイラ診断メッセージを無視するのはなぜですか?

于 2012-12-05T00:47:37.727 に答える
2

試し てみadd(*(r->phy_addr[0])); てください

于 2012-12-05T01:56:04.200 に答える
1

r->phy_addr にはint **型があると思われます。r->phy_addr[0]型を取得すると、コンパイラは、引数は型ではなく型でint *ある必要があることを警告します。intint *

のタイプをr->phy_addrに変更しint *ます。

ありがとう。

于 2012-12-05T00:42:28.110 に答える
0

どうですか:

add(*(r->phy_addr[0]));

? どうやらr->phy_addr[0]はポインターであるためです。

于 2012-12-05T00:24:26.423 に答える