用指针交换变量

时间:2013-03-18 20:32:52

标签: c pointers stack

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);
}

2 个答案:

答案 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。

因此,未初始化指针的行为完全取决于堆栈的状态,这几乎是随机的:取决于之前调用的函数以及它们使用的数据量及其局部变量。