2017-03-03 24 views
0

我想交换两个参数的值。但是我没有通过在函数中交换他们的地址来实现它。起初,我认为地址可以在功能上改变。但是在调试之后,我发现虽然地址在函数中被改变了,但在主函数中没有改变。为什么指针的地址在函数中的作用与参数的值相同?做,只更改副本?通过函数中的地址交换两个参数出错

include<stdio.h> 
void swap(int *, int *); 
int main() 
{ 
    int a = 5 , b = 10; 
    swap(&a, &b); 
    printf("%d", a); 
    printf("\n%p", &a); 
    return 0; 
} 

void swap(int *a, int *b) 
{ 
    int *temp ; 
    temp = a; 
    a = b; 
    b = temp; 

} 

现在我已经学会了解决这个问题的方法之一。但谁能告诉我如何通过二级指针来解决它。因为你是自动交换本地指针将一次函数调用返回不复存在

#include<stdio.h> 
void swap(); 
int main() 
{ 
    int a = 5 , b = 10; 
    swap(&a, &b); 
    printf("%d", a); 
    printf("\n%p", &a); 
    return 0; 
} 
void swap(int *a, int *b) 
{ 
    int temp ; 
    temp = *a; 
    *a = *b; 
    *b = temp; 
} 
+0

int a = 5,b = 10;只有1个深度。不能得到&((..)&a) –

+0

在你的第二块,你显示正确的整数交换功能。你想在哪里有第二个排名指针? – Holger

+0

好的!我找到了我想要的答案。 – Ghoster

回答

3

在第一个片段的交换不会发生。在main函数中将不会看到对swap函数中的本地指针的这种修改。

+0

谢谢!我已在其他问题中找到具体答案,但我也感谢您的帮助! – Ghoster