swapping variables with pointers
1 2 3 4 5 6 | void swap (int *px, int *py) { int temp; temp = *px; *px = *py; *py = temp; } |
这将交换两个变量,这对我来说很好。
如果我把它改成
1 2 3 4 5 6 | void swap (int *px, int *py) { int *temp; *temp = *px; *px = *py; *py = *temp; } |
注意:内部温度
尽管如此,这仍然有效,但是temp在未初始化的情况下被取消引用。
这有什么用呢?
比如,如果我想创建一个名为proc的方法,我怎么能保证程序会崩溃呢?我想我应该把东西放在书堆上。
1 2 3 4 5 | int main () { int a = 1, b = 2; proc(/* Some args might go here */); swap(&a, &b); } |
既然
int temp;
temp = *px;
*px = *py;
*py = temp;
}
你所要做的就是靠运气:未初始化的
因此,未初始化指针的行为完全取决于堆栈的状态,这实际上是随机的:取决于以前调用过哪些函数,使用了多少数据以及它们的局部变量。