人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

久しぶりにCを書いていたら、キャストでハマりました。int => charへのキャストとint * => char * へのキャストの違いについて教えてください。

int a = 0x12345678;
unsigned char ac = (unsigned char) a;

int i = 0x12345678;
unsigned char * ic = (unsigned char *)&i;

この2つの違いです。


●質問者: tono5652
●カテゴリ:コンピュータ
✍キーワード:AC Char IC キャスト
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● studioes
●35ポイント

unsigned char ac = (unsigned char) a;

acにaの値をunsigned char型の値として入れる。

unsigned char * ic = (unsigned char *)&i;

ポインタicに、iのポインタをunsigned char型へのポインタとして入れる。

http://q.hatena.ne.jp/

◎質問者からの返答

それは分かっているつもりです。

(int)a を unsigner char にキャストした時点で a の領域は、もしintが4byteであれば、後方3byteは削られてしまう(可能性がある)のでしょうか。

一方後者の方では ic の指す領域は4byteのまま保たれているのかなと。

そのようなことについてお聞きしたいと考えていました。質問の仕方が悪かったかもしれません。


2 ● studioes
●35ポイント ベストアンサー

>(int)a を unsigner char にキャストした時点で a の領域は、もしintが4byteであれば、後方3byteは削られてしまう(可能性がある)のでしょうか。

aの領域は無関係。 acにはaの8ビットだけが入ってくる。 キャストは、変換しているわけではなく、その型であるとみなしているだけ。

>一方後者の方では ic の指す領域は4byteのまま保たれているのか

ポインタを扱っている以上、ポインタはただ先頭を指し示すのみ。 icを読めば、charの範囲しか読まないけど、icを(int*)icとして読めば元通りintの範囲が読める。

http://q.hatena.ne.jp/

◎質問者からの返答

あ、そうか。目が覚めました。ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ