2016-12-13 3 views
-2

どういう意味ですか?それはどういう意味ですか?変数のアドレスをcharにキャストします。どうして?

int main(int argc, char *argv[]) { 
    int size = 2048; 
    char *stack; 

    stack = (char *) &size; // cast memory address of a variable to char 
} 

私は変数のメモリアドレスをキャストするとどうなるでしょうか。

+0

は良いていない誰かによって書かれたコードであると思われる(マシン・エンディアンに依存)デバッガ。関数のスタックフレームを見ることは、ボグの標準的な機能です。本当の意図を潜んで、よく、誰が知っている。私たちではなく、彼に尋ねなさい。 –

+1

@Oka Prinarjaya実際のコードとキャスティングが使用されているコンテキストを表示していないため、意味がありません。 –

答えて

2
int size = 2048; 
char *stack; 
stack = (char *) &size; // cast memory address of a variable to char 
  • size 4バイトのメモリブロック(典型的)を占めるint変数です。
  • &sizeは、そのメモリブロックのアドレスです。
  • char *stack = (char *)&sizeを意味します。つまり、stackは、その4バイトメモリブロックの先頭を指すcharへのポインタです。基本的

*stackは4バイトの整数変数の最初のバイトであり、正確な値は、プラットフォームに依存し

+0

まだ明確ではありません。なぜなら、私はprintf( "stack size =%d \ n"、sizeof(stack))を試してみました。それは印刷する8.どのように来る?それは実際には何ですか? –

+0

'sizeof(stack)'はポインタのサイズです。通常、64bマシンでは、8bバイトの64bポインターを取得します。 – artm

+0

Btw、 'size_t'に'%d'を使用せず、代わりに '%zu'を使用してください – artm

関連する問題