第八章 程序的結構

思考如何去學習一章新的知識呢?????

  • 這章主要講的是什么呢?
    1.數(shù)據(jù)如何傳給函數(shù)
    2.函數(shù)如何返回結果
    3.如何定義自己的函數(shù)
    4.函數(shù)原型的概念和使用場合
    5.函數(shù)使用指針參數(shù)的優(yōu)勢

將程序分成適度的自包含單元是開發(fā)任一程序的基本方式

8.1 程序的結構

8.1.1 變量的作用域和生存期

  • 變量在一個塊內聲明時創(chuàng)建,在這個塊結束時銷毀,這種變量稱為自動變量
  • 給定變量可以在某個程序代碼塊中訪問和引用,這個程序代碼塊稱為變量的作用域
  • 變量存在的時間稱為變量的生存期

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ù)用逗號分開
{
//statements.....
}

術語“變元”表示調用函數(shù)時提供的對應于參數(shù)的值

調用函數(shù)的一般形式:

Function_name(List of Arguments - separated by commas) 以逗號分隔的參數(shù)列表

1函數(shù)的命名

  • 在函數(shù)名稱中用下劃線字符分開每個單詞
  • 將每個單詞的第一個字母大寫
  • 將除第一個單詞之外的每個單詞的第一個字母大寫

2 函數(shù)的參數(shù)

出現(xiàn)問題的時候怎么解決問題

函數(shù)頭 說明
bool SendMessage(char*text) 該函數(shù)有一個參數(shù)text,其類型是char指針類型,該函數(shù)返回一個bool類型的值。
void PrintData(int count, double *data) 該函數(shù)有兩個參數(shù),一個是int類型的,另一個是double指針類型,該函數(shù)沒有返回值
int SumIt(int x[], size_t n) 該函數(shù)的第一個參數(shù)是一個int []類型的數(shù)組,第二個參數(shù)把數(shù)組的元素指定為一個size_t類型的值。該函數(shù)返回一個int 類型的值。
char message GetMessage(void) 這個函數(shù)沒有參數(shù),返回一個char*類型的指針
  • 函數(shù)的參數(shù)是一列變量名稱和它們的類型,參數(shù)之間以逗號分隔。
    參數(shù)提供了調用函數(shù)給被調用函數(shù)傳遞信息的方法。
    調用函數(shù)是給它們指定的值稱為“變元”

3 指定返回值的類型

  • 常見函數(shù)的形式如下:
Return_type  Function_name(List of Paramters - separated by commas)
{
//statements.....
}
  • 返回值可以指定為c語言中任意合法的類型: 枚舉類型和指針。

  • 希望能返回一個能靈活返回指向各種類型的地址時,可以使用void*的返回類型:即指向void的指針,返回值是一個地址值,但沒有指定返回類型。

8.2.2 Return 語句

  1. return 語句最簡潔的形式是:返回類型聲明為void的函數(shù),它不返回任何值。
return ;

2.較常見的return 語句形式是:返回類型沒有聲明為void的函數(shù),返回給調用程序的值是計算expression的結果。

return expression

8.3 按值傳遞機制

給函數(shù)傳送變元時,變元值不會直接傳遞給函數(shù),而是先制作變元值得副本,存儲在棧上,再使這個副本可用于函數(shù),而不是使用初始值
這個機制是C語句中的所有的變元值傳遞給函數(shù)的方式,稱為按值傳遞機制
pass - by -value mechanism

8.4 函數(shù)原型

  • 函數(shù)原型是一個定義函數(shù)基本特性的語句,它定義了函數(shù)的名稱、返回值的類型和每個參數(shù)的類型,與函數(shù)頭相比,要在函數(shù)原型的后面加上分號。
    函數(shù)聲明也叫函數(shù)原型,因為函數(shù)原型提供了函數(shù)的所有的外部規(guī)范。
    在程序中包含頭文件時,這個頭文件會在程序中為庫函數(shù)添加函數(shù)原型。

  • 參數(shù)類型double*等價于函數(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ù)的作用是從其聲明處開始一直到源文件的結尾。
代碼二:
//#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關鍵字應用于指針參數(shù),指定函數(shù)不修改該變元指向的值
bool  SendMessage(const  char* pmessage)
{
    //code to send the message
    return true;
}

參數(shù)pmessage的類型是指向const char 的指針
把const 關鍵字放在開頭,指定被指向數(shù)據(jù)是常量。

指針的指針參數(shù)(參數(shù)是指向指針的指針時),const的一種用途
不能把指針指向const,但可以把(指針指向的指針)指定為const,防止修改指針指向的內容

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)

第一個參數(shù)const char* const* str是指向const char的常量指針的指針類型。

8.5.2 返回指針的風險

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,663評論 1 51
  • __block和__weak修飾符的區(qū)別其實是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,591評論 0 6
  • 1.寫一個NSString類的實現(xiàn) +(id)initWithCString:(c*****t char *)nu...
    韓七夏閱讀 3,872評論 2 37
  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型。 運用指針編程是C語言最主要的風格之一。利用指針變量可以表示各種數(shù)據(jù)結構; ...
    朱森閱讀 3,612評論 3 44
  • 多多是一只拉布拉多,現(xiàn)在9個月了。先生非常喜歡狗,一直就想我們自己住了之后就養(yǎng)一只狗狗,于是2016年十二月份,多...
    笨笨小小豬閱讀 327評論 0 3

友情鏈接更多精彩內容