2017-03-03 28 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