-1

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

4

2 回答 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 回答