指標的學習總結2
阿新 • • 發佈:2018-11-27
父函式呼叫子函式時,要想子函式能修改父函式中的內容,前提必須滿足兩步:1.傳指標;2.解引用。
現在通過交換兩個變數的數值來理解指標。
1.編寫第一個交換函式
如下
void Swap1(int a,int b)
{
int tmp;
tmp = a;
a = b;
b = tmp;
}
int main()
{
int a = 10;
int b = 20;
printf("%d,%d\n",a,b);
Swap1(a,b);
printf("%d,%d\n",a,b);
return 0;
}
此時會出現a和b並沒有交換成功。
為什麼呢?因為這個時候主函式和swap1函式裡面的a、b不相同,從各自的地址不同可知。
2.編寫第二個交換函式
void Swap2(int *p1,int *p2){
int *tmp;
tmp = p1;
p1 = p2;
p2 = tmp;
}
int main()
{
int a = 10;
int b = 20;
printf("%d,%d\n",a,b);
Swap2(&a,&b);
printf("%d,%d\n",a,b);
return 0;
}
此時還是沒有成功,是因為什麼呢,傳指標到子函式去了,但是沒有解引用。
3.編寫第三個函式
void Swap3(int *p1,int *p2){
int *tmp ; // 野指標,懸掛指標:沒有指向有效的地址
*p1 = *p2;
*p2 = *tmp;
}
此時會出現崩潰現象,是因為設定了野指標,野指標不知道其所存的地址可以不可以訪問,就直接訪問,肯定會引起崩潰。