new演算子について

解決


らいあん  2005-06-02 02:13:50  No: 57653

new について質問です。
newを使ってポインタを二次元配列に変換することはできないのでしょうか?
例:

DWORD dw = new DWORD[h][w];

と、いった形にいたいのですがエラーになってしまいます。
BCCにてコンパイルしているのですが、

'unsigned long ( *)[1]'型は'unsigned long *'型に変換できない

と、エラーになってしまいます。


Blue  2005-06-02 02:34:50  No: 57654

関連スレ
http://www.mtakahashi.com/bbs.htm


Blue  2005-06-02 02:36:48  No: 57655

間違えてフレームのURLをはってしまいました。

訂正
http://www.mtakahashi.com/cgi.cgi?13171


YuO  2005-06-02 02:48:25  No: 57656

> newを使ってポインタを二次元配列に変換することはできないのでしょうか?

何がしたいのですか?
ポインタと二次元配列は完全に別物です。

> DWORD dw = new DWORD[h][w];
> と、いった形にいたいのですがエラーになってしまいます。

そりゃあ……。

このnewの戻り値の型は,DWORD (*)[w]です。
しかし,宣言されているオブジェクトはDWORD型ですから,型が一致していません。
この行は
DWORD (*dw)[w] = new DWORD[h][w];
と書く必要があります。

また,wが整定数でないのであれば,newの使い方自体が間違っていることになります。


らいあん  2005-06-02 03:11:01  No: 57657

回答ありがとうございます。
DWORD(*)[w]が返ってくるのですね。

↑の文もちょっと間違えてました。

DWORD *dw = new DWORD[h][w];

と、してたのでした。

どっちにしろエラーなわけですが。。。

さらにちょっと質問なのですが、
(*)[w]に関してポインタに対して配列になるんですね。

これってどういうことになるんでしょうか?


YuO  2005-06-02 03:30:02  No: 57658

DWORD (*)[w]
は,
【『「DWORD」型を要素とする,w個からなる配列』型へのポインタ】型です。

DWORD *[w]
が,
【『「DWORD」型へのポインタ』型を要素とする,w個からなる配列】型になります。


らいあん  2005-06-02 03:43:00  No: 57659

なるほど。
的確な説明助かります。

これで解決させてもらいます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加