对于int ** p = NULL;
C 中的语句,请讨论关于p
, *p
, **p
?的内存分配。它将在堆栈上还是在空位置或其他地方???
问问题
182 次
2 回答
1
p
将是int **
堆栈上的指针,并将包含 value NULL
。
尝试评估*p
将导致运行时错误,因为您将尝试取消引用NULL
. 但如果它不会导致运行时错误,它将是内存位置的值0
。
尝试评估**p
是不可能达到的,因为*p
是不可能评估的(将导致运行时错误)。但是,如果*p
没有导致运行时错误,那么**p
将是内存位置的值所指向的内存位置的值0
。
编辑:*p
并且**p
没有分配到任何地方,因为它们不作为单独的变量存在。内存中只有一个变量,p
,并且存储在堆栈中。这就像问,如果我这样做int i = 10;
,i * 5
存储在哪里?
于 2012-08-24T23:03:20.930 回答
1
p
只是一个指向某处的变量。- 它的类型是
int**
这意味着它可以指向一个指向int
. - 由于您没有编写任何分配内存的代码,因此不会发生内存分配..
- ..当然除了
p
自己的内存分配:假设一个32位地址空间,4字节的内存分配在堆栈上,该内存地址的值为0(NULL)。
于 2012-08-24T23:16:02.037 回答