亚洲欧美精品沙发,日韩在线精品视频,亚洲Av每日更新在线观看,亚洲国产另类一区在线5

<pre id="hdphd"></pre>

  • <div id="hdphd"><small id="hdphd"></small></div>
      學(xué)習(xí)啦 > 知識(shí)大全 > 知識(shí)百科 > 百科知識(shí) > c語(yǔ)言中什么是參數(shù)

      c語(yǔ)言中什么是參數(shù)

      時(shí)間: 冠墩784 分享

      c語(yǔ)言中什么是參數(shù)

        如何寫可變參數(shù)的C函數(shù)以及這些可變參數(shù)的函數(shù)編譯器是如何實(shí)現(xiàn)的呢?下面是學(xué)習(xí)啦小編為大家整理的關(guān)于c語(yǔ)言的參數(shù)介紹及使用,希望可以幫到大家哦。

        簡(jiǎn)單的可變參數(shù)的C函數(shù)

        下面我們來(lái)探討如何寫一個(gè)簡(jiǎn)單的可變參數(shù)的C函數(shù).寫可變參數(shù)的C函數(shù)要在程序中用到以下這些宏:

        void va_start( va_list arg_ptr, prev_param );

        type va_arg( va_list arg_ptr, type );

        void va_end( va_list arg_ptr );

        va在這里是variable-argument(可變參數(shù))的意思.

        這些宏定義在stdarg.h中,所以用到可變參數(shù)的程序應(yīng)該包含這個(gè)頭文件.下面我們寫一個(gè)簡(jiǎn)單的可變參數(shù)的函數(shù),改函數(shù)至少有一個(gè)整數(shù)參數(shù),第二個(gè)參數(shù)也是整數(shù),是可選的.函數(shù)只是打印這兩個(gè)參數(shù)的值.

        void simple_va_fun(int i, ...)

        {

        va_list arg_ptr;

        int j=0;

        va_start(arg_ptr, i);

        j=va_arg(arg_ptr, int);

        va_end(arg_ptr);

        printf(%d %dn, i, j);

        return;

        }

        我們可以在我們的頭文件中這樣聲明我們的函數(shù):

        extern void simple_va_fun(int i, ...);

        我們?cè)诔绦蛑锌梢赃@樣調(diào)用:

        simple_va_fun(100);

        simple_va_fun(100,200);

        從這個(gè)函數(shù)的實(shí)現(xiàn)可以看到,我們使用可變參數(shù)應(yīng)該有以下步驟:

        1)首先在函數(shù)里定義一個(gè)va_list型的變量,這里是arg_ptr,這個(gè)變量是指向參數(shù)的指針.

        2)然后用va_start宏初始化變量arg_ptr,這個(gè)宏的第二個(gè)參數(shù)是第一個(gè)可變參數(shù)的前一個(gè)參數(shù),是一個(gè)固定的參數(shù).

        3)然后用va_arg返回可變的參數(shù),并賦值給整數(shù)j. va_arg的第二個(gè)參數(shù)是你要返回的參數(shù)的類型,這里是int型.

        4)最后用va_end宏結(jié)束可變參數(shù)的獲取.然后你就可以在函數(shù)里使用第二個(gè)參數(shù)了.如果函數(shù)有多個(gè)可變參數(shù)的,依次調(diào)用va_arg獲取各個(gè)參數(shù).

        如果我們用下面三種方法調(diào)用的話,都是合法的,但結(jié)果卻不一樣:

        1)simple_va_fun(100);

        結(jié)果是:100 -123456789(會(huì)變的值)

        2)simple_va_fun(100,200);

        結(jié)果是:100 200

        3)simple_va_fun(100,200,300);

        結(jié)果是:100 200

        我們看到第一種調(diào)用有錯(cuò)誤,第二種調(diào)用正確,第三種調(diào)用盡管結(jié)果正確,但和我們函數(shù)最初的設(shè)計(jì)有沖突.下面一節(jié)我們探討出現(xiàn)這些結(jié)果的原因和可變參數(shù)在編譯器中是如何處理的.

        可變參數(shù)在編譯器中的處理

        我們知道va_start,va_arg,va_end是在stdarg.h中被定義成宏的,由于1)硬件平臺(tái)的不同 2)編譯器的不同,所以定義的宏也有所不同,下

        面以VC++中stdarg.h里x86平臺(tái)的宏定義摘錄如下(''號(hào)表示折行):

        typedef char * va_list;

        #define _INTSIZEOF(n)

        ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) )

        #define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )

        #define va_arg(ap,t)

        ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )

        #define va_end(ap) ( ap = (va_list)0 )
      看了“c語(yǔ)言中什么是參數(shù)”的人還看了:

      1.c語(yǔ)言什么是變量 變量的分類

      2.C語(yǔ)言程序中什么是函數(shù)

      3.c語(yǔ)言中什么是函數(shù)

      4.c語(yǔ)言中typedef的用法

      5.c語(yǔ)言string的用法

      6.c語(yǔ)言中define的用法

      1380478