识别指针和内存分配

时间:2012-09-25 06:13:19

标签: c memory pointers

p*p**p有哪些内存分配(如果有的话)以及我写char **p = NULL时的内存分配情况?

3 个答案:

答案 0 :(得分:4)

p的大小取决于其类型。 *p**p(以及***p**********p等)的大小是指针的大小:通常为4或8个字节,具体取决于您是否是使用32位或64位系统。

当你写char **p = NULL时,你不会分配超出char **p给你的额外内存。你只是用一个值初始化变量在内存中的位置,而不是让它没有初始化。

至于其中,它取决于上下文。如果它们是函数中的局部变量,则在调用函数时它们将被分配在堆栈中。如果它们是全局变量,它们将被赋予程序数据段中的位置。如果它们是struct的成员,那么它取决于您声明结构类型变量的位置。

答案 1 :(得分:1)

变量存储在堆栈中,如果不是静态/全局的话。这里没有堆内存分配。它只是(无效)内存地址。

答案 2 :(得分:0)

当您编写char **p = NULL;时,p将成为局部变量(在大多数情况下,在堆栈中,如果它在函数内定义)或全局变量(在大多数情况下,既不在堆栈上也不在堆中(从malloc()分配内存的地方),如果它在所有函数之外定义的话。)

*p的位置未定义,因为您无法合法取消引用NULL指针。

同样适用于**p,因为您首先需要解散p,这是非法的。

等等。