• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    C語言教學(xué)中函數(shù)參數(shù)傳遞問題探討

    2012-05-08 04:41:46董鑫正
    電腦知識與技術(shù) 2012年7期
    關(guān)鍵詞:數(shù)據(jù)類型數(shù)組指針

    董鑫正

    摘要:在一些C語言教材和參考資料中,常常把函數(shù)參數(shù)傳遞分為“數(shù)值傳遞”和“地址傳遞”兩種方式,這種概念模糊的分類方法給初學(xué)者的理解造成一定程度的困難。該文明確區(qū)分了函數(shù)參數(shù)傳遞涉及的兩個(gè)基本概念:傳遞方式和數(shù)據(jù)類型,從而把問題轉(zhuǎn)化為對參數(shù)傳遞方式和參數(shù)數(shù)據(jù)類型的理解;通過對普通類型變量作為函數(shù)參數(shù)、指針作為函數(shù)參數(shù)和數(shù)組名作為函數(shù)參數(shù)三種情況的舉例分析,總結(jié)出傳遞方式只有“值傳遞”一種形式,數(shù)據(jù)類型的難點(diǎn)主要是指針類型與非指針類型的區(qū)別。

    關(guān)鍵詞:傳遞方式;數(shù)據(jù)類型;值傳遞;指針;數(shù)組

    中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2012)07-1688-02

    The Discussion on Function Parameters Passing in the C Language Teaching

    DONG Xin-zheng

    (Department of Computer Science and Technology, Zhuhai College of Jilin University, Zhuhai 519041, China)

    Abstract:The function parameter-passing modes are usually divided into“value passing”and“address passing”in some textbooks, which brings some difficulty for the beginners to understand. This paper makes a clear distinction between parameter-passing mode and data type, which are two basic concepts related with function parameter passing; analyzes three cases: general data type as function parameters, pointer data type as function parameters and array name as function parameters; gets the summary that“pass-by-value”is the only function parameter-passing mode in C language, the difficulty about data type is to distinct between the pointer data type and non-pointer data type.

    Key words:parameter-passing mode; data type; pass-by-value; pointer; array

    1概述

    函數(shù)是C語言程序的基本構(gòu)成模塊,通過使用函數(shù),不僅可以省去重復(fù)代碼的編寫,還可以使程序更加模塊化,從而有利于程序的閱讀、修改和完善。對于C語言的初學(xué)者來說,準(zhǔn)確理解函數(shù)參數(shù)的傳遞方式是難點(diǎn)之一。一些C語言程序設(shè)計(jì)教材[1][2]中把函數(shù)間的參數(shù)傳遞分為“數(shù)值傳遞”和“地址傳遞”兩種方式,這種分類很容易使初學(xué)者混淆概念,更不能抓住參數(shù)傳遞的本質(zhì)。

    2傳遞方式和數(shù)據(jù)類型

    “值傳遞”[3]是函數(shù)參數(shù)的唯一傳遞方式。函數(shù)的參數(shù)分為實(shí)際參數(shù)(簡稱實(shí)參)和形式參數(shù)(簡稱形參),在定義函數(shù)時(shí)使用的參數(shù)叫形參,在調(diào)用函數(shù)時(shí)使用的參數(shù)叫實(shí)參。實(shí)參可以是常量、變量或表達(dá)式,但要求它們有確定的值。實(shí)參與形參的結(jié)合只有一種方式,即“值傳遞”,把實(shí)參的值賦給形參變量?!爸祩鬟f”具有單向性,只能把實(shí)參傳給形參,而不能由形參回傳給實(shí)參。

    不同數(shù)據(jù)類型的函數(shù)參數(shù)對主調(diào)函數(shù)中變量的作用有所不同。函數(shù)參數(shù)可取的數(shù)據(jù)類型為基本類型、構(gòu)造類型、指針類型或空類型,如圖1[3]所示??疹愋捅硎驹摵瘮?shù)為無參函數(shù),在此不作介紹。其余數(shù)據(jù)類型又可分為三類:普通類型,包括基本類型、結(jié)構(gòu)體類型和共用體類型;指針類型;數(shù)組類型。函數(shù)參數(shù)為普通類型時(shí),對函數(shù)的調(diào)用不用影響到主調(diào)函數(shù)中變量的值;函數(shù)參數(shù)為指針類型或數(shù)組類型時(shí),對函數(shù)的調(diào)用可以修改主調(diào)函數(shù)中有關(guān)變量的值。

    圖1

    3普通類型變量作為函數(shù)參數(shù)

    普通變量作為函數(shù)參數(shù)時(shí),對形參的修改不會影響到實(shí)參。如下例所示,通過“值傳遞”,形參x保存了實(shí)參a的值,形參y保存了實(shí)參b的值,因?yàn)樾螀⒑蛯?shí)參是相互獨(dú)立的不同變量,所以在swap函數(shù)中對形參x和y進(jìn)行的交換不會反映到實(shí)參a和b中。

    #include

    void swap(int x, int y)

    {

    int temp;

    temp=x; x=y; y=temp;

    }

    void main()

    {

    int a, b;

    scanf("%d%d", &a, &b);

    swap(a, b);

    printf("%d %d ", a, b);

    }

    輸入:1 2

    輸出:1 2

    4指針作為函數(shù)參數(shù)

    變量的指針就是變量的地址,存放變量地址的變量叫指針變量,定義指針變量的一般形式為:

    基類型*指針變量名;

    通過指針變量訪問其所指向的變量的方式稱為間接訪問方式。如下例所示。

    int age;

    a=10; //直接訪問方式

    int* p=&a

    *p=11; //間接訪問方式

    指針類型作為函數(shù)參數(shù)時(shí),參數(shù)傳遞方式仍然是“值傳遞”,即把實(shí)參的值傳遞給形參。不同的是參數(shù)為指針變量,可以通過形參的間接訪問方式來讀取或修改主調(diào)函數(shù)中有關(guān)變量的值。

    如下例所示,通過“值傳遞”,形參x保存了變量a的地址,形參y保存了變量b的地址,即x指向變量a,y指向變量b,在swap函數(shù)中通過間接訪問方式交換了變量a和b的值。

    #include

    void swap(int* x, int* y)

    {

    int temp;

    temp=*x; *x=*y; *y=temp;

    }

    void main()

    {

    int a, b;

    scanf("%d%d", &a, &b);

    swap(&a, &b);

    printf("%d %d ", a, b);

    }

    輸入:1 2

    輸出:2 1

    5數(shù)組名作為函數(shù)參數(shù)

    數(shù)組元素和數(shù)組名也可以作為函數(shù)參數(shù),數(shù)組元素作為函數(shù)參數(shù)與普通變量用法相同,數(shù)組名作為函數(shù)參數(shù)與指針變量相同。

    用數(shù)組名作函數(shù)形參時(shí),指定數(shù)組大小是不起任何作用的。因?yàn)镃語言編譯對形參數(shù)組大小不做檢查,只是將實(shí)參數(shù)組的首地址傳遞給形參數(shù)組。實(shí)參數(shù)組名即是實(shí)參數(shù)組的首地址,相當(dāng)于指針常量;形參數(shù)組名相當(dāng)于指針變量。實(shí)際上,C編譯都是將形參數(shù)組名作為指針變量來處理的[3]。所以,數(shù)組名作為函數(shù)參數(shù)可以按指針作為函數(shù)參數(shù)來理解。

    如下例所示,數(shù)組名array代表數(shù)組array的首地址,通過“值傳遞”,形參數(shù)組名a,也可以理解為形參指針變量a,保存了數(shù)組array的首地址,因此,在swap函數(shù)中對形參數(shù)組a的操作即是對實(shí)參數(shù)組array的操作。

    #include

    void swap(int a[])

    {

    int temp;

    temp=a[0]; a[0]=a[1]; a[1]=temp;

    }

    void main()

    {

    int array[2];

    scanf("%d%d", &array[0], &array[1]);

    swap(array);

    printf("%d %d ", array[0], array[1]);

    }

    輸入:1 2

    輸出:2 1

    6結(jié)論

    綜上所述,C語言函數(shù)參數(shù)問題主要涉及兩個(gè)概念:傳遞方式和數(shù)據(jù)類型。實(shí)參與形參的傳遞方式只有一種,即“值傳遞”。參數(shù)的數(shù)據(jù)類型可以為普通類型、指針類型和數(shù)組類型,數(shù)組類型實(shí)際上是按指針類型來處理的,所以,主要是指針類型與非指針類型的區(qū)別。對初學(xué)者來說,問題的難點(diǎn)在于數(shù)據(jù)類型的不同而非傳遞方式,即指針類型變量與非指針類型變量的區(qū)別。

    參考文獻(xiàn):

    [1]田祥宏.C語言程序設(shè)計(jì)[M].西安:西安電子科技大學(xué)出版社,2007.

    [2]李明.C語言程序設(shè)計(jì)教程[M].上海:上海交通大學(xué)出版社,2008.

    [3]譚浩強(qiáng).C程序設(shè)計(jì)[M]. 3版.北京:清華大學(xué)出版社,2005.

    猜你喜歡
    數(shù)據(jù)類型數(shù)組指針
    JAVA稀疏矩陣算法
    詳談Java中的基本數(shù)據(jù)類型與引用數(shù)據(jù)類型
    JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
    如何理解數(shù)據(jù)結(jié)構(gòu)中的抽象數(shù)據(jù)類型
    偷指針的人
    為什么表的指針都按照順時(shí)針方向轉(zhuǎn)動
    尋找勾股數(shù)組的歷程
    基于改進(jìn)Hough變換和BP網(wǎng)絡(luò)的指針儀表識別
    電測與儀表(2015年5期)2015-04-09 11:30:42
    ARM Cortex—MO/MO+單片機(jī)的指針變量替換方法
    VB數(shù)組在for循環(huán)中的應(yīng)用
    考試周刊(2012年88期)2012-04-29 04:36:47
    巴楚县| 贵州省| 大关县| 林州市| 定结县| 大余县| 徐水县| 晋宁县| 抚顺市| 西华县| 凤山市| 合阳县| 肇州县| 潮安县| 西贡区| 襄汾县| 紫金县| 察隅县| 青冈县| 贵港市| 道真| 嘉兴市| 科技| 鹤岗市| 娄烦县| 土默特左旗| 滨海县| 桂阳县| 五台县| 会东县| 绥德县| 日土县| 汤阴县| 巫溪县| 平顶山市| 琼结县| 从江县| 大余县| 白山市| 辉南县| 磐安县|