2016-12-13 40 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