C语言函数参数传递
1.值傳遞
void swap(int x,int y) {int temp = x;x = y;y = temp; }void main() { int a = 10, b = 20;swap(a, b); }執行后,并不會交換。
2.引用傳遞
void swap(int &x,int &y) {int temp = x;x = y;y = temp; }void main() { int a = 10, b = 20;swap(a, b);printf("a=%d\nb=%d\n", a, b); }執行后,發生交換。
3.指針傳遞
void swap(int *x,int *y) {int temp = *x;*x = *y;*y = temp; }void main() { int a = 10, b = 20;swap(&a, &b);printf("a=%d\nb=%d\n", a, b); }執行后,發生交換。
4.數組做參數,傳的到底是什么?
參數傳遞只有上面三種,但是如果加上數組,就會產生幾種新形式。?
首先,明確數組型變量名本身只是該數組所占存儲空間的首地址:
int a[3] = { 1, 2, 3 };int *p = a; //等價于下行//int *p = &a[0]; printf("%d", *p);》》》典型的數組做參數
void fun(char s[]){for (int i = 0; s[i] != '\0'; i++)printf("%c", s[i]); } void main() {char str[] = "Hello World!";fun(str); }函數調用時,這里系統不會為形參分配數組存儲空間,而是僅僅分配一個存放數組地址(第一個元素地址)的存儲空間,此后,將實參數組的首地址傳遞給形參變量。其實本質與下相同,只不過還是數組形式的(數組名代替指針)。
》》》既然數組型變量名本身只是該數組所占存儲空間的首地址,我們當然可以用指針做形參來接收數組實參
void fun(char *p){while (*p){printf("%c", *p);p++;} } void main() {char str[] = "Hello World!";fun(str); }不過問題是如果這樣,無法把握數組結束(除非知道數組長度)。而對于字符數組(上例),由于字符串末尾有結束標志'\0'(ascii碼正好是0),所以就很容易利用指針來判斷字符串是否結束。
轉載于:https://www.cnblogs.com/qwer112/p/8471051.html
總結
- 上一篇: ngDialog 点击窗口以外不允许关闭
- 下一篇: Entity Framework Rel