什么是内存分配(如果有的话)p
,我写*p
的**p
时候它们在哪里char **p = NULL
?
问问题
93 次
3 回答
4
的大小p
取决于其类型。*p
and **p
(and ***p
,等) 的大小**********p
是指针的大小:通常是 4 或 8 个字节,具体取决于您使用的是 32 位还是 64 位系统。
当您编写时char **p = NULL
,您不会分配超出char **p
给您的任何额外内存。您只是用一个值初始化变量在内存中的位置,而不是让它未初始化。
至于他们在哪里,这取决于上下文。如果这些是函数中的局部变量,它们将在调用函数时分配到堆栈上。如果它们是全局变量,它们将被赋予程序数据段中的位置。如果它们是 a 的成员struct
,则取决于您在何处声明结构类型的变量。
于 2012-09-25T06:28:02.343 回答
1
变量存储在堆栈上,如果不是静态/全局的。这里没有堆内存分配。它只是(无效的)内存地址。
于 2012-09-25T06:17:10.103 回答
0
当您编写char **p = NULL;
时,p
将是一个局部变量(在大多数情况下,在堆栈上,如果它是在函数内部定义的),或者是一个全局变量(在大多数情况下既不在堆栈上,也不在堆中(从哪里malloc()
分配内存) ),如果它是在所有函数之外定义的)。
*p
的位置未定义,因为您不能合法地取消引用 NULL 指针。
这同样适用,**p
因为您首先需要解除引用p
,这是非法的。
等等。
于 2012-09-25T12:12:53.743 回答