void swap (int *px, int *py) {
int temp;
temp = *px;
*px = *py;
*py = temp;
}
将交换两个变量,这对我来说没问题。
现在如果我将其更改为
void swap (int *px, int *py) {
int *temp;
*temp = *px;
*px = *py;
*py = *temp;
}
注意int * temp
但无论如何都可行,但是在没有初始化的情况下,temp被取消引用。
这不适用于什么价值?
就好像我想制作一个名为proc的方法我怎么能保证程序会崩溃?我想我应该在堆栈上留下一些东西。
int main () {
int a = 1, b = 2;
proc(/* Some args might go here */);
swap(&a, &b);
}
答案 0 :(得分:1)
由于int
是基本类型,为什么不只是......
void swap (int *px, int *py) {
int temp;
temp = *px;
*px = *py;
*py = temp;
}
答案 1 :(得分:0)
你做的是依靠好运:未初始化的int *temp;
使用堆栈中的一些垃圾,如果你足够幸运,它的解除引用将使程序崩溃SIGSEGV(Windows上的AccessViolation),否则(并且它很多)更糟糕的是!它破坏了一些现有的存储位置数据,这对于程序来说可能是至关重要的,但它会在很晚的时候显示为一个神秘的geizenbug。
因此,未初始化指针的行为完全取决于堆栈的状态,这几乎是随机的:取决于之前调用的函数以及它们使用的数据量及其局部变量。