次の式は何を意味しますか?unsigned char *をlongにキャストする
unsigned char *res = malloc(5);
は今、私はres
をキャスト:
(long)res
このキャスティングは何を意味するのでしょうか?
次の式は何を意味しますか?unsigned char *をlongにキャストする
unsigned char *res = malloc(5);
は今、私はres
をキャスト:
(long)res
このキャスティングは何を意味するのでしょうか?
この値を使用すると、res
が指すアドレス(ちょうど数字にすぎません)をlongとして解釈します。
ほとんどの場合動作しますが、それは完全に大丈夫ではありません(使用方法によって大きく異なります)。あなたは、単にそれを印刷したい場合たとえば、あなたが経験則として
printf("%p", res);
で逃げることができます。疑いで任意のキャストを扱います。
割り当てられたメモリは読み込まれません。メモリへのポインタをlong型にキャストしているだけです。
これはあなたの質問に直接答えるものではありませんが、あなたの混乱に多かれ少なかれ役立つ情報です。
ポインタ型から整数型へのキャストは、実装定義です(つまり、インプリメンテーションは、ポインタを整数にキャストするときに何が起こるかを決定します)。いくつかのタイプの可逆変換をサポートするC99の実装では、具体的には、ポインタを整数に変換するための<stdint.h>
の2種類、つまりuintptr_t
とintptr_t
を提供する必要があります。あなたの実装がこれらの2つの型を提供するならば、安全にこれらの型にポインタを変換し、元のポインタ型に戻すことができます。
これらの型は実装上定義されているため、基になる型が何であるかについては実装のドキュメントを確認する必要があります。
'long'は2ワード、' unsigned char * 'は1ワードとします。残りの部分はどこで取るのですか?コールスタック? – amit
残りのビットは、ソースタイプが符号付きで負の場合は1、それ以外の場合は0になります。 –
とはどういう意味ですか?あなたは私に例を教えていただけますか? – mary