2016-12-13 75 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 
  • sizeint變量佔據一個4字節的存儲器塊(通常)。
  • &size因此是該內存塊的地址。
  • char *stack = (char *)&size這意味着stack是一個指向char的指針,指向該4字節內存塊的開始。

基本上*stack是4字節int變量的第一個字節,其確切值是平臺相關的(取決於機器字節順序)

+0

還不清楚。因爲,我試着printf(「stack size =%d \ n」,sizeof(stack));它打印8.怎麼回事?實際上它究竟是什麼。 –

+0

'sizeof(stack)'是指針的大小。通常在64b機器上你得到64b指針,它是8個字節。 – artm

+0

順便說一句,不要使用'%d'作爲'size_t',而是使用'%zu' – artm