- ベストアンサー
ポインタのキャスト
配列の先頭アドレスをunsigned long型で取得するにはどうしたら良いでしょうか? 下記だとダメですよね? char a{4} = [0, 1, 2, 3]; unsigned long adr; adr = (usigned long)&a[0]; よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
unsigned longがpointerを表す型であるというシステムなら、 adr = (unsigned long)a; とすれば行けるはずです。もちろん、一般的には下記です。 char* adr; adr = a; &a[0]はおかしいです。aで配列の先頭アドレスを表します。 a[0]がchar型のデータ0を表しますから、このアドレスを取 り出すということはあり得ません。
その他の回答 (2)
- toda hiro(@hiro_knigh)
- ベストアンサー率39% (59/151)
>VisualStduio2008で実行してみましたが、aのアドレス情報取得できませんでした。。。 取得できないと言うのは、コンパイルがNGだったのか、コンパイル正常終了後の実行で参照不正等でプログラムが落ちてしまったのか? 色々あると思います。 &a[0]は確かにaの先頭アドレスを示します。 また、「アドレス情報」とおっしゃっている情報がどんな情報なのか申し訳ありませんが私には分かりませんでした。 私の情報不足?
お礼
すいません、解決できました。 VCのデバッガだと10進で表示されていてたので、、、 ありがとうございます。
- toda hiro(@hiro_knigh)
- ベストアンサー率39% (59/151)
そもそも、何故そんな事をやりたいのかが分かりません。 素直にchar型のポインタで受け取ればいいだけのような気がするのですが。。。 キャストやらずにプログラムが組めるのであれば、キャストしないのが一番です。 何故やりたいのか、考えを教えてください。
補足
早速の回答ありがとうございます。 > キャストやらずにプログラムが組めるのであれば、キャストしないのが一番です。 おっしゃる通りです。 本来レジスタからunsigned long型でレジスタ情報を取得したいのですが、そのレジスタを化かすためにunsigned long型でアドレス情報が欲しいです
補足
回答ありがとうございます。 > unsigned longがpointerを表す型であるというシステムなら、 > adr = (unsigned long)a; > とすれば行けるはずです。 VisualStduio2008で実行してみましたが、aのアドレス情報取得できませんでした。。。 > &a[0]はおかしいです。aで配列の先頭アドレスを表します。 > a[0]がchar型のデータ0を表しますから、このアドレスを取 > り出すということはあり得ません。 おかしいでしょうか? a[0]のデータのアドレスを取得=配列の先頭アドレスの意味になりませんか?