• ベストアンサー

ポインタのキャスト

配列の先頭アドレスをunsigned long型で取得するにはどうしたら良いでしょうか? 下記だとダメですよね? char a{4} = [0, 1, 2, 3]; unsigned long adr; adr = (usigned long)&a[0]; よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

unsigned longがpointerを表す型であるというシステムなら、 adr = (unsigned long)a; とすれば行けるはずです。もちろん、一般的には下記です。 char* adr; adr = a; &a[0]はおかしいです。aで配列の先頭アドレスを表します。 a[0]がchar型のデータ0を表しますから、このアドレスを取 り出すということはあり得ません。

catsuya
質問者

補足

回答ありがとうございます。 > unsigned longがpointerを表す型であるというシステムなら、 > adr = (unsigned long)a; > とすれば行けるはずです。 VisualStduio2008で実行してみましたが、aのアドレス情報取得できませんでした。。。 > &a[0]はおかしいです。aで配列の先頭アドレスを表します。 > a[0]がchar型のデータ0を表しますから、このアドレスを取 > り出すということはあり得ません。 おかしいでしょうか? a[0]のデータのアドレスを取得=配列の先頭アドレスの意味になりませんか?

その他の回答 (2)

回答No.3

>VisualStduio2008で実行してみましたが、aのアドレス情報取得できませんでした。。。 取得できないと言うのは、コンパイルがNGだったのか、コンパイル正常終了後の実行で参照不正等でプログラムが落ちてしまったのか? 色々あると思います。 &a[0]は確かにaの先頭アドレスを示します。 また、「アドレス情報」とおっしゃっている情報がどんな情報なのか申し訳ありませんが私には分かりませんでした。 私の情報不足?

catsuya
質問者

お礼

すいません、解決できました。 VCのデバッガだと10進で表示されていてたので、、、 ありがとうございます。

回答No.1

そもそも、何故そんな事をやりたいのかが分かりません。 素直にchar型のポインタで受け取ればいいだけのような気がするのですが。。。 キャストやらずにプログラムが組めるのであれば、キャストしないのが一番です。 何故やりたいのか、考えを教えてください。

catsuya
質問者

補足

早速の回答ありがとうございます。 > キャストやらずにプログラムが組めるのであれば、キャストしないのが一番です。 おっしゃる通りです。 本来レジスタからunsigned long型でレジスタ情報を取得したいのですが、そのレジスタを化かすためにunsigned long型でアドレス情報が欲しいです

関連するQ&A