溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C語(yǔ)言可變參數(shù)怎么使用

發(fā)布時(shí)間:2022-10-21 15:05:01 來(lái)源:億速云 閱讀:148 作者:iii 欄目:編程語(yǔ)言

本篇內(nèi)容主要講解“C語(yǔ)言可變參數(shù)怎么使用”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“C語(yǔ)言可變參數(shù)怎么使用”吧!

一、什么是可變參數(shù)

我們?cè)贑語(yǔ)言編程中有時(shí)會(huì)遇到一些參數(shù)個(gè)數(shù)可變的函數(shù),例如printf()函數(shù),其函數(shù)原型為:

int printf( const char* format, ...);

它除了有一個(gè)參數(shù)format固定以外,后面跟的參數(shù)的個(gè)數(shù)和類(lèi)型是可變的(用三個(gè)點(diǎn)“…”做參數(shù)占位符),實(shí)際調(diào)用時(shí)可以有以下的形式:

printf("%d",i);  printf("%s",s);  printf("the number is %d ,string is:%s", i, s);

二、寫(xiě)一個(gè)簡(jiǎn)單的可變參數(shù)的C函數(shù)

先看例子程序。該函數(shù)至少有一個(gè)整數(shù)參數(shù),其后是占位符…,表示后面參數(shù)的個(gè)數(shù)不定. 在這個(gè)例子里,所有的輸入?yún)?shù)必須都是整數(shù),函數(shù)的功能是打印所有參數(shù)的值.

函數(shù)代碼如下:

//示例代碼1:可變參數(shù)函數(shù)的使用  #include "stdio.h"  #include "stdarg.h"  void simple_va_fun(int start, ...)  {  va_list arg_ptr;  int nArgValue =start;  int nArgCout=0; //可變參數(shù)的數(shù)目  va_start(arg_ptr,start); //以固定參數(shù)的地址為起點(diǎn)確定變參的內(nèi)存起始地址。  do {  ++nArgCout;  printf("the %d th arg: %d\n",nArgCout,nArgValue); //輸出各參數(shù)的值  nArgValue = va_arg(arg_ptr,int); //得到下一個(gè)可變參數(shù)的值  } while(nArgValue != -1);  return;  }  int main(int argc, char* argv[])  {  simple_va_fun(100,-1);  simple_va_fun(100,200,-1);  return 0;  }

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

⑴在程序中將用到以下這些宏:

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è)頭文件.

⑵函數(shù)里首先定義一個(gè)va_list型的變量,這里是arg_ptr,這個(gè)變量是指向參數(shù)地址的指針.因?yàn)榈玫絽?shù)的地址之后,再結(jié)合參數(shù)的類(lèi)型,才能得到參數(shù)的值。

⑶然后用va_start宏初始化⑵中定義的變量arg_ptr,這個(gè)宏的第二個(gè)參數(shù)是可變參數(shù)列表的前一個(gè)參數(shù),也就是***一個(gè)固定參數(shù)。

⑷然后依次用va_arg宏使arg_ptr返回可變參數(shù)的地址,得到這個(gè)地址之后,結(jié)合參數(shù)的類(lèi)型,就可以得到參數(shù)的值。然后進(jìn)行輸出。

⑸設(shè)定結(jié)束條件,這里的條件就是判斷參數(shù)值是否為-1。注意被調(diào)的函數(shù)在調(diào)用時(shí)是不知道可變參數(shù)的正確數(shù)目的,程序員必須自己在代碼中指明結(jié)束條件。

到此,相信大家對(duì)“C語(yǔ)言可變參數(shù)怎么使用”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI