トップページ > 過去ログ > 記事閲覧
配列のポインタのエラー
名前:通りすがり 日時: 2008/01/10 20:43

error C2440: '=' : 'int (*__w64 )[5]' から 'int *[5]' に変換できません。 というエラーが出現し、ビルドが通らなくなります。 サンプルは void Set(int **); int main(){ int z[5] = {0,1,2,3,4}; int *y[5]; y = &z; Set(&y); } void Set(int **x){ } のように打ちました。 エラーはy = &z;で発生してしまいます。 稚拙な質問で申し訳ありませんが、 よろしくお願いします。

Page: 1 |

Re: 配列のポインタのエラー ( No.1 )
名前: 日時:2008/01/12 05:46

zはint[5]型 yはint*[5]型 &zはint(*)[5]型 &yはint*(*)[5]型 全部型が違います。 やるなら、 void Set(int x[][5]); もしくは void Set(int (*x)[5]); として int main(){ int z[5] = {0,1,2,3,4}; int (*y)[5]; y = &z; Set(y); } void Set(int x[][5]){ } または void Set(int (*x)[5]) {} int**でもいけますが、型が違うので警告が出ますし 環境によってはコンパイルエラーになるでしょう。 訂正です。。。 すみません。。。 zを2次元配列だと思ってたorz 質問者さんの意図はタブンこでれですね。。。 void Set(int **); int main(){ int z[5] = {0,1,2,3,4}; int *y; y = z; Set(&y); } void Set(int **x){ } 普通は以下のように配列の個数を引数に持たせてあげると、5個までの配列でなくても渡すことができます void Set(int *, int ); int main(){ int z[5] = {0,1,2,3,4}; Set(z,sizeof(z)); } void Set(int *x, int c){ } #普通にやるなら一番下のヤツだと思うので一応 #順番も訂正しておきました。

Page: 1 |