思考如何去學(xué)習(xí)一章新的知識(shí)呢?华糖?麦向??客叉?
- 這章主要講的是什么呢诵竭?
1.數(shù)據(jù)如何傳給函數(shù)
2.函數(shù)如何返回結(jié)果
3.如何定義自己的函數(shù)
4.函數(shù)原型的概念和使用場(chǎng)合
5.函數(shù)使用指針參數(shù)的優(yōu)勢(shì)
將程序分成適度的自包含單元是開發(fā)任一程序的基本方式
8.1 程序的結(jié)構(gòu)
8.1.1 變量的作用域和生存期
- 變量在一個(gè)塊內(nèi)聲明時(shí)創(chuàng)建话告,在這個(gè)塊結(jié)束時(shí)銷毀,這種變量稱為自動(dòng)變量
- 給定變量可以在某個(gè)程序代碼塊中訪問和引用卵慰,這個(gè)程序代碼塊稱為變量的作用域
- 變量存在的時(shí)間稱為變量的生存期
8.1.2 變量的作用域和函數(shù)
8.2 函數(shù)
8.2.1 定義函數(shù)
函數(shù)頭定義了函數(shù)的名稱沙郭、函數(shù)的參數(shù)、函數(shù)返回值的類型
函數(shù)的一般形式如下所示:
Return_type Function_name(Parameters-separated by commas ) 參數(shù)用逗號(hào)分開
{
//statements.....
}
術(shù)語“變?cè)北硎菊{(diào)用函數(shù)時(shí)提供的對(duì)應(yīng)于參數(shù)的值
調(diào)用函數(shù)的一般形式:
Function_name(List of Arguments - separated by commas) 以逗號(hào)分隔的參數(shù)列表
1函數(shù)的命名
- 在函數(shù)名稱中用下劃線字符分開每個(gè)單詞
- 將每個(gè)單詞的第一個(gè)字母大寫
- 將除第一個(gè)單詞之外的每個(gè)單詞的第一個(gè)字母大寫
2 函數(shù)的參數(shù)
出現(xiàn)問題的時(shí)候怎么解決問題
函數(shù)頭 | 說明 |
---|---|
bool SendMessage(char*text) | 該函數(shù)有一個(gè)參數(shù)text,其類型是char指針類型裳朋,該函數(shù)返回一個(gè)bool類型的值病线。 |
void PrintData(int count, double *data) | 該函數(shù)有兩個(gè)參數(shù),一個(gè)是int類型的鲤嫡,另一個(gè)是double指針類型氧苍,該函數(shù)沒有返回值 |
int SumIt(int x[], size_t n) | 該函數(shù)的第一個(gè)參數(shù)是一個(gè)int []類型的數(shù)組,第二個(gè)參數(shù)把數(shù)組的元素指定為一個(gè)size_t類型的值泛范。該函數(shù)返回一個(gè)int 類型的值。 |
char message GetMessage(void) | 這個(gè)函數(shù)沒有參數(shù)紊撕,返回一個(gè)char*類型的指針 |
- 函數(shù)的參數(shù)是一列變量名稱和它們的類型罢荡,參數(shù)之間以逗號(hào)分隔。
參數(shù)提供了調(diào)用函數(shù)給被調(diào)用函數(shù)傳遞信息的方法对扶。
調(diào)用函數(shù)是給它們指定的值稱為“變?cè)?/li>
3 指定返回值的類型
- 常見函數(shù)的形式如下:
Return_type Function_name(List of Paramters - separated by commas)
{
//statements.....
}
返回值可以指定為c語言中任意合法的類型: 枚舉類型和指針区赵。
希望能返回一個(gè)能靈活返回指向各種類型的地址時(shí),可以使用void*的返回類型:即指向void的指針浪南,返回值是一個(gè)地址值笼才,但沒有指定返回類型。
8.2.2 Return 語句
- return 語句最簡(jiǎn)潔的形式是:返回類型聲明為void的函數(shù)络凿,它不返回任何值骡送。
return ;
2.較常見的return 語句形式是:返回類型沒有聲明為void的函數(shù),返回給調(diào)用程序的值是計(jì)算expression的結(jié)果絮记。
return expression
8.3 按值傳遞機(jī)制
給函數(shù)傳送變?cè)獣r(shí)摔踱,變?cè)挡粫?huì)直接傳遞給函數(shù),而是先制作變?cè)档酶北驹狗撸鎯?chǔ)在棧上派敷,再使這個(gè)副本可用于函數(shù),而不是使用初始值
這個(gè)機(jī)制是C語句中的所有的變?cè)祩鬟f給函數(shù)的方式撰洗,稱為按值傳遞機(jī)制
pass - by -value mechanism
8.4 函數(shù)原型
函數(shù)原型是一個(gè)定義函數(shù)基本特性的語句篮愉,它定義了函數(shù)的名稱、返回值的類型和每個(gè)參數(shù)的類型差导,與函數(shù)頭相比试躏,要在函數(shù)原型的后面加上分號(hào)。
函數(shù)聲明也叫函數(shù)原型设褐,因?yàn)楹瘮?shù)原型提供了函數(shù)的所有的外部規(guī)范冗酿。
在程序中包含頭文件時(shí)埠对,這個(gè)頭文件會(huì)在程序中為庫函數(shù)添加函數(shù)原型。參數(shù)類型double*等價(jià)于函數(shù)定義中參數(shù)類型double[]裁替。
函數(shù)是如何定義的呢项玛??弱判?
- 最好總是把函數(shù)的聲明放在程序的源文件中襟沮。
main()函數(shù)不需要定義函數(shù)原型。
代碼一:
// #include & #define directives ....
int main()
{
//code in main() ...
{
double Average(double x[ ], size_t n)
{
// return sum(x,n)/n;
}
double sum(double x[], size_t n)
{
// statements
}
size_t GetData(double *data, size_t max_count)
{
//statements
}
源文件:
函數(shù)原型:
- 函數(shù)原型放在源文件的開頭處昌腰,而且在所有函數(shù)的定義和頭文件之前
在源文件中开伏,函數(shù)原型在所有函數(shù)的外部,函數(shù)的作用是從其聲明處開始一直到源文件的結(jié)尾遭商。
代碼二:
//#include &#define directives ....
//funcation prototypes
double Average(double data_values[], size_t count);
double Sum(double *x , size_t n);
size_t GetData(double*, size_t);
int main(void)
{
// Code in main() ...
}
//Definitions for Average( ), sum( ) and GetData( ) ....
8.5 指針用作參數(shù)和返回值
8.5.1 常量參數(shù)
- 將const關(guān)鍵字應(yīng)用于指針參數(shù)固灵,指定函數(shù)不修改該變?cè)赶虻闹?/li>
bool SendMessage(const char* pmessage)
{
//code to send the message
return true;
}
參數(shù)pmessage的類型是指向const char 的指針
把const 關(guān)鍵字放在開頭,指定被指向數(shù)據(jù)是常量劫流。
指針的指針參數(shù)(參數(shù)是指向指針的指針時(shí))巫玻,const的一種用途
不能把指針指向const,但可以把(指針指向的指針)指定為const祠汇,防止修改指針指向的內(nèi)容
void sort(const char** str, size_t n)
參數(shù)const char** str是指向const char 的指針的指針類型
第二種const的可能用途是
void replace(char *const * str, size_t n);
參數(shù) char *const * str 是指向char的常量指針的指針
第三種const可能的用途
size_t max_length(const char* const* str , size_t n)
第一個(gè)參數(shù)const char* const* str是指向const char的常量指針的指針類型仍秤。