最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言可變參數(shù)函數(shù)詳解

 更新時(shí)間:2021年08月26日 12:05:34   作者:C語(yǔ)言中文網(wǎng)  
在某些情況下我們希望函數(shù)的參數(shù)個(gè)數(shù)可以根據(jù)需要確定,因此c語(yǔ)言引入可變參數(shù)函數(shù)。典型的可變參數(shù)函數(shù)的例子有printf()、scanf()等,下面我就開(kāi)始講解

C語(yǔ)言可變參數(shù)函數(shù)

C 語(yǔ)言允許定義參數(shù)數(shù)量可變的函數(shù),這稱(chēng)為可變參數(shù)函數(shù)(variadic function)。這種函數(shù)需要固定數(shù)量的強(qiáng)制參數(shù)(mandatory argument),后面是數(shù)量可變的可選參數(shù)(optional argument)。

這種函數(shù)必須至少有一個(gè)強(qiáng)制參數(shù)??蛇x參數(shù)的類(lèi)型可以變化。可選參數(shù)的數(shù)量由強(qiáng)制參數(shù)的值決定,或由用來(lái)定義可選參數(shù)列表的特殊值決定。

C 語(yǔ)言中最常用的可變參數(shù)函數(shù)例子是 printf()和 scanf()。這兩個(gè)函數(shù)都有一個(gè)強(qiáng)制參數(shù),即格式化字符串。格式化字符串中的轉(zhuǎn)換修飾符決定了可選參數(shù)的數(shù)量和類(lèi)型。

對(duì)于每一個(gè)強(qiáng)制參數(shù)來(lái)說(shuō),函數(shù)頭部都會(huì)顯示一個(gè)適當(dāng)?shù)膮?shù),像普通函數(shù)聲明一樣。參數(shù)列表的格式是強(qiáng)制性參數(shù)在前,后面跟著一個(gè)逗號(hào)和省略號(hào)(...),這個(gè)省略號(hào)代表可選參數(shù)。

可變參數(shù)函數(shù)要獲取可選參數(shù)時(shí),必須通過(guò)一個(gè)類(lèi)型為 va_list 的對(duì)象,它包含了參數(shù)信息。這種類(lèi)型的對(duì)象也稱(chēng)為參數(shù)指針(argument pointer),它包含了棧中至少一個(gè)參數(shù)的位置??梢允褂眠@個(gè)參數(shù)指針從一個(gè)可選參數(shù)移動(dòng)到下一個(gè)可選參數(shù),由此,函數(shù)就可以獲取所有的可選參數(shù)。va_list 類(lèi)型被定義在頭文件 stdarg.h 中。

當(dāng)編寫(xiě)支持參數(shù)數(shù)量可變的函數(shù)時(shí),必須用 va_list 類(lèi)型定義參數(shù)指針,以獲取可選參數(shù)。在下面的討論中,va_list 對(duì)象被命名為 argptr。可以用 4 個(gè)宏來(lái)處理該參數(shù)指針,這些宏都定義在頭文件 stdarg.h 中:

void va_start(va_list argptr, lastparam);

宏 va_start 使用第一個(gè)可選參數(shù)的位置來(lái)初始化 argptr 參數(shù)指針。該宏的第二個(gè)參數(shù)必須是該函數(shù)最后一個(gè)有名稱(chēng)參數(shù)的名稱(chēng)。必須先調(diào)用該宏,才可以開(kāi)始使用可選參數(shù)。

type va_arg(va_list argptr, type);

展開(kāi)宏 va_arg 會(huì)得到當(dāng)前 argptr 所引用的可選參數(shù),也會(huì)將 argptr 移動(dòng)到列表中的下一個(gè)參數(shù)。宏 va_arg 的第二個(gè)參數(shù)是剛剛被讀入的參數(shù)的類(lèi)型。

void va_end(va_list argptr);

 當(dāng)不再需要使用參數(shù)指針時(shí),必須調(diào)用宏 va_end。如果想使用宏 va_start 或者宏 va_copy 來(lái)重新初始化一個(gè)之前用過(guò)的參數(shù)指針,也必須先調(diào)用宏 va_end。

void va_copy(va_list dest, va_list src);

宏 va_copy 使用當(dāng)前的 src 值來(lái)初始化參數(shù)指針 dest。然后就可以使用 dest 中的備份獲取可選參數(shù)列表,從 src 所引用的位置開(kāi)始。

 例 1 中的函數(shù)展示了這些宏的使用方法。

【例1】函數(shù) add()

// 函數(shù)add() 計(jì)算可選參數(shù)之和
// 參數(shù):第一個(gè)強(qiáng)制參數(shù)指定了可選參數(shù)的數(shù)量,可選參數(shù)為double類(lèi)型
// 返回值:和值,double類(lèi)型
double add( int n, ... )
{
  int i = 0;
  double sum = 0.0;
  va_list argptr;
  va_start( argptr, n );             // 初始化argptr
  for ( i = 0; i < n; ++i )       // 對(duì)每個(gè)可選參數(shù),讀取類(lèi)型為double的參數(shù),
    sum += va_arg( argptr, double ); // 然后累加到sum中
  va_end( argptr );
  return sum;
}

總結(jié)

本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 從C語(yǔ)言過(guò)渡到C++之基本變化

    從C語(yǔ)言過(guò)渡到C++之基本變化

    在之前的C++代碼訓(xùn)練營(yíng)系列中,我試圖用完成具體項(xiàng)目的方式給大家介紹C++,但后來(lái)大家反饋說(shuō)這樣從C過(guò)渡到C++有點(diǎn)跟不上。于是我又專(zhuān)門(mén)設(shè)計(jì)了這個(gè)《從C到C++》的過(guò)渡專(zhuān)題,我準(zhǔn)備通過(guò)10篇文章介紹一下C++和C的重要區(qū)別。
    2017-07-07
  • 使用Qt實(shí)現(xiàn)獲取本機(jī)IP和定位

    使用Qt實(shí)現(xiàn)獲取本機(jī)IP和定位

    這篇文章主要為大家詳細(xì)介紹了如何使用Qt實(shí)現(xiàn)獲取本機(jī)IP和定位,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • C++與QML進(jìn)行數(shù)據(jù)交互實(shí)現(xiàn)方式介紹

    C++與QML進(jìn)行數(shù)據(jù)交互實(shí)現(xiàn)方式介紹

    迫于無(wú)奈開(kāi)始寫(xiě)android的程序,以前使用QWidget的方式試過(guò),雖然界面可以實(shí)現(xiàn),但是最后調(diào)用攝像頭時(shí),未能成功,再?zèng)]有繼續(xù)。這幾天開(kāi)始使用qml進(jìn)行嘗試,在使用的過(guò)程中,其中的一個(gè)難點(diǎn),就是在qml與c++中數(shù)據(jù)的交互
    2022-09-09
  • 關(guān)于C++ string和c類(lèi)型字符數(shù)組的對(duì)比

    關(guān)于C++ string和c類(lèi)型字符數(shù)組的對(duì)比

    下面小編就為大家?guī)?lái)一篇關(guān)于C++ string和c類(lèi)型字符數(shù)組的對(duì)比。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-07-07
  • C語(yǔ)言實(shí)現(xiàn)快速排序

    C語(yǔ)言實(shí)現(xiàn)快速排序

    快速排序不一定是穩(wěn)定排序,這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)快速排序算法,具有一定的參考價(jià)值,感興趣的同學(xué)可以借鑒閱讀
    2023-03-03
  • 基于make命令與makefile文件詳解

    基于make命令與makefile文件詳解

    下面小編就為大家分享一篇基于make命令與makefile文件詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • C語(yǔ)言中dlopen和dlsym的使用方式詳解

    C語(yǔ)言中dlopen和dlsym的使用方式詳解

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言中dlopen和dlsym的使用方式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • C語(yǔ)言實(shí)現(xiàn)二值圖像模擬灰值圖像顯示效果

    C語(yǔ)言實(shí)現(xiàn)二值圖像模擬灰值圖像顯示效果

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)二值圖像模擬灰值圖像顯示效果,分為圖案法、抖動(dòng)法兩個(gè)方法實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • c++ 深入理解歸并排序的用法

    c++ 深入理解歸并排序的用法

    歸并排序是典型分治思想的代表——首先把原問(wèn)題分解為兩個(gè)或多個(gè)子問(wèn)題,然后求解子問(wèn)題的解,最后使用子問(wèn)題的解來(lái)構(gòu)造出原問(wèn)題的解
    2022-03-03
  • 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-用棧實(shí)現(xiàn)表達(dá)式求值的方法詳解

    數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-用棧實(shí)現(xiàn)表達(dá)式求值的方法詳解

    本篇文章是對(duì)在c語(yǔ)言中用棧實(shí)現(xiàn)表達(dá)式求值的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05

最新評(píng)論

岳池县| 武功县| 上思县| 大宁县| 浦城县| 田东县| 蒲城县| 丽水市| 丰原市| 云安县| 威宁| 柏乡县| 辉县市| 古浪县| 平原县| 廊坊市| 蕲春县| 盐亭县| 棋牌| 惠东县| 遵义市| 抚顺市| 通城县| 陆河县| 十堰市| 阳信县| 垫江县| 麻阳| 五寨县| 蓬溪县| 湘阴县| 五常市| 泰州市| 和静县| 武城县| 清流县| 湖北省| 抚松县| 个旧市| 苏尼特左旗| 泰和县|