对于C中的语句int ** p = NULL;
,请讨论p
,*p
,**p
的内存分配情况?它是在堆栈上还是在空位置或其他地方???
答案 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)。