亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        C語言教學中函數參數傳遞問題探討

        2012-05-08 04:41:46董鑫正
        電腦知識與技術 2012年7期
        關鍵詞:數據類型數組指針

        董鑫正

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

        關鍵詞:傳遞方式;數據類型;值傳遞;指針;數組

        中圖分類號:TP311文獻標識碼: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概述

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

        2傳遞方式和數據類型

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

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

        圖1

        3普通類型變量作為函數參數

        普通變量作為函數參數時,對形參的修改不會影響到實參。如下例所示,通過“值傳遞”,形參x保存了實參a的值,形參y保存了實參b的值,因為形參和實參是相互獨立的不同變量,所以在swap函數中對形參x和y進行的交換不會反映到實參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指針作為函數參數

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

        基類型*指針變量名;

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

        int age;

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

        int* p=&a

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

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

        如下例所示,通過“值傳遞”,形參x保存了變量a的地址,形參y保存了變量b的地址,即x指向變量a,y指向變量b,在swap函數中通過間接訪問方式交換了變量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數組名作為函數參數

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

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

        如下例所示,數組名array代表數組array的首地址,通過“值傳遞”,形參數組名a,也可以理解為形參指針變量a,保存了數組array的首地址,因此,在swap函數中對形參數組a的操作即是對實參數組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結論

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

        參考文獻:

        [1]田祥宏.C語言程序設計[M].西安:西安電子科技大學出版社,2007.

        [2]李明.C語言程序設計教程[M].上海:上海交通大學出版社,2008.

        [3]譚浩強.C程序設計[M]. 3版.北京:清華大學出版社,2005.

        猜你喜歡
        數據類型數組指針
        JAVA稀疏矩陣算法
        電腦報(2022年13期)2022-04-12 00:32:38
        詳談Java中的基本數據類型與引用數據類型
        JAVA玩轉數學之二維數組排序
        電腦報(2020年24期)2020-07-15 06:12:41
        如何理解數據結構中的抽象數據類型
        數碼世界(2020年5期)2020-06-23 00:14:36
        偷指針的人
        娃娃畫報(2019年5期)2019-06-17 16:58:10
        為什么表的指針都按照順時針方向轉動
        尋找勾股數組的歷程
        基于改進Hough變換和BP網絡的指針儀表識別
        電測與儀表(2015年5期)2015-04-09 11:30:42
        ARM Cortex—MO/MO+單片機的指針變量替換方法
        VB數組在for循環(huán)中的應用
        考試周刊(2012年88期)2012-04-29 04:36:47
        亚洲成人一区二区三区不卡| 亚洲成av人片天堂网九九| 久久HEZYO色综合| 日本韩国三级在线观看| 老师开裆丝袜喷水视频| 国产激情精品一区二区三区| 中文亚洲爆乳av无码专区| 日韩av他人妻中文字幕| 人妖av手机在线观看| 40岁大乳的熟妇在线观看| 在线欧美不卡| 亚洲中文字幕永久网站| 国产免费一区二区三区精品视频| 亚洲日韩av无码| 亚洲成人777| 久久综合这里只有精品| 一个人看的视频在线观看| 亚洲国产精品日韩av不卡在线| 好爽受不了了要高潮了av| 久久综合老鸭窝色综合久久| 亚洲精品国产精品乱码在线观看| 欧美大屁股xxxxhd黑色| 国产av综合一区二区三区最新| 国产诱惑人的视频在线观看| 亚洲av成人片无码网站| a级黑人大硬长爽猛出猛进| 亚洲精品美女久久久久99| 久久精品一区二区三区蜜桃| 久久成人国产精品免费软件| 亚洲欧美中文在线观看4| 国产免费99久久精品| 天天躁夜夜躁狠狠是什么心态 | 日本人妻免费在线播放| 中文亚洲欧美日韩无线码| 日韩五十路| av在线一区二区精品| 少妇熟女天堂网av| 亚洲一二三区在线观看| 国产亚洲午夜高清国产拍精品不卡| 国产让女高潮的av毛片| 久久夜色精品国产噜噜麻豆|