内存分配** p

时间:2012-08-24 22:58:29

标签: c pointers heap

对于C中的语句int ** p = NULL;,请讨论p*p**p的内存分配情况?它是在堆栈上还是在空位置或其他地方???

2 个答案:

答案 0 :(得分:1)

p将成为堆栈上的int **指针,其中包含值NULL

尝试评估*p会导致运行时错误,因为您将尝试取消引用NULL。但如果它不会导致运行时错误,那么它将是内存位置0的值。

尝试评估**p是不可能的,因为*p无法评估(会导致运行时错误)。但是如果*p没有导致运行时错误,则**p将是内存位置0处的值所指向的内存位置的值。

编辑:*p**p未在任何地方分配,因为它们不作为单独的变量存在。内存中只有一个变量p,它存储在堆栈中。这就像问我是否int i = 10;i * 5存储在哪里?

答案 1 :(得分:1)

  • p只是指向某处的变量。
  • 其类型为int**,这意味着它可以指向指向int的指针。
  • 由于您尚未编写任何分配内存的代码,因此不会进行内存分配..
  • ..除了p本身的内存分配:假设32位地址空间,在堆栈上分配4个字节的内存,并且该内存地址的值为0(NULL)。