C語言系列(23) 函式(02)

2021-09-27 02:40:24 字數 2630 閱讀 7721

一、傳值和傳址

引數的傳遞有兩種方式,傳變數的、傳變數的位址(指標)

例:定乙個函式,對傳入的兩個整型值,輸出較大的那個。

void

printmax

(int a,

int b)

;//函式宣告

intmain()

void

printmax

(int a,

int b)

//函式定義

上述案例,函式引數只是普通的的傳遞。

例:定義乙個函式,對傳入的兩個整型值進行交換。

錯誤示例:

void

swap

(int a,

int b)

;//函式宣告

intmain()

void

swap

(int a,

int b)

//函式定義

列印a:10, b:20

注意:結果顯示,通過呼叫swap函式,並沒有顯示main函式中a、b兩個變數的交換。

因為這個函式定義只是進行了值的傳遞,swap函式中進行交換只是交換了區域性變數的值。

交換函式如下定義:

void

swap

(int

*a,int

*b);

//函式宣告

intmain()

void

swap

(int

*a,int

*b)//函式定義,形參為指標型別,接受傳遞過來的位址(指標)

函式:實現陣列排序

void

arrascsort

(int arr,

int size)

;//第乙個引數也可以寫成,int * arr

intmain()

;arrascsort

(arr,10)

;//傳位址(指標)

for(

int i =

0; i <

10; i++

)system

("pause");

return0;

}void

arrascsort

(int arr,

int size)

//陣列型別作為引數,實際是傳遞位址(指標)}}

}

二、返回位址(指標)

錯誤示例:

int

*resarr()

;int i =0;

for(i =

0; i <

10; i++

)return arr;

//arr是區域性變數,隨著函式的結束會被銷毀,返回無意義

}int

main()

system

("pause");

return0;

}

正確示例:

int

*resarr()

;int

* arr =

(int*)

malloc

(sizeof

(int)*

10);//堆空間可以返回

int i =0;

for(i =

0; i <

10; i++

)return arr;

//arr是區域性變數,隨著函式的結束會被銷毀,返回無意義

}int

main()

free

(p);

//注意釋放

system

("pause");

return0;

}

三、練習
char

*mystrcpy

(char

* des,

const

char

* sou)

while

(*sou !=0)

*p++

=*sou++

;*p =0;

return des;

}

char

*mystrcat

(char

* des,

const

char

* sou)

while(*

(sou+i)!=0

)*(des + len + i)=0

;return des;

}

const

char

*mystrstr

(const

char

* str,

const

char

* substr)

}return

null

;}

C語言str函式系列

1 strcat 此函式原型為 char strcat char dest,const char src 功能為連線兩個字串,把src連線到dest後面 返回dest位址 實現如下 char strcat char dest,const char src while dest src return ...

C語言str 函式系列

char strcat char dest,const char src while dest src return addr 2 strcmp intstrcmp const char str1,const char str2 return str1 str2 3 strcpy char strc...

C語言 作業02

這個作業屬於哪個課程 這個作業要求在 這個作業的目標 學會精確的提問並且能夠使用scanf和printf 學號 20209021 二.作業的內容 1 1請仔細閱讀 提問的智慧型 用自己的話描你的收穫,並舉列子說明應該如何提問。收穫1.不能隨意提出問題,要先經過自己的思考,查資加料,因為這樣才對雙方都...