C语言开发笔记(六)实参和形参
生活随笔
收集整理的這篇文章主要介紹了
C语言开发笔记(六)实参和形参
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
舉例說明
#include <stdio.h>void swap(int x, int y) {int temp = 0;temp = x;x = y;y = temp; }int main(void) {int a = 1, b = 2;swap(a, b);printf("a=%d, b=%d\n", a, b);return 0; }結(jié)果為
在函數(shù)調(diào)用時,a的值傳給x,b的值傳給y。執(zhí)行完swap函數(shù)后,x和y的值是互換了,但main函數(shù)中的a和b并未互換。
該例子中a、b為實參,x、y為形參。
函數(shù)調(diào)用中發(fā)生的數(shù)據(jù)傳送是單向的。即只能把實參的值傳給形參,而不能把形參的值反向地傳給實參。因此在函數(shù)調(diào)用過程中,形參的值發(fā)生改變,而實參中的值不會變化。
形參變量只有在被調(diào)用時才分配內(nèi)存單元,在調(diào)用結(jié)束時,立刻釋放所分配的內(nèi)存單元。
?
稍微修改示例代碼
#include <stdio.h>void swap(int *x, int *y) {int *temp;temp = x;x = y;y = temp; }int main(void) {int a = 1, b = 2;int *p1 = &a, *p2 = &b;swap(p1, p2);printf("a=%d, b=%d\n", a, b);return 0; }結(jié)果仍然是
這也是需要注意的,不能企圖通過改變指針形參的值而使指針實參的值改變。
?
再修改代碼
#include <stdio.h>void swap(int *x, int *y) {int *temp;*temp = *x;*x = *y;*y = *temp; }int main(void) {int a = 1, b = 2;int *p1 = &a, *p2 = &b;swap(p1, p2);printf("a=%d, b=%d\n", a, b);return 0; }編譯的時候會出現(xiàn)警告:
運行后會出錯:
因為temp沒有確定的地址值,所指向的單元是不可預(yù)見的,它的值也是不可預(yù)見的。因此,對*temp賦值可能會破壞系統(tǒng)的正常工作狀況。所以應(yīng)該用整型變量temp作為臨時輔助變量實現(xiàn)交換功能。
修改代碼如下:
#include <stdio.h>void swap(int *x, int *y) {int temp = 0;temp = *x;*x = *y;*y = temp; }int main(void) {int a = 1, b = 2;int *p1 = &a, *p2 = &b;swap(p1, p2);printf("a=%d, b=%d\n", a, b);return 0; }結(jié)果為
總結(jié)
以上是生活随笔為你收集整理的C语言开发笔记(六)实参和形参的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 地下城与勇士黒碳头宠物怎么装
- 下一篇: C语言代码规范(五)函数参数个数