0

什么是内存分配(如果有的话)p,我写*p**p时候它们在哪里char **p = NULL

4

3 回答 3

4

的大小p取决于其类型。*pand **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 回答