0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語言可變形參是什么

嵌入式技術(shù) ? 來源:嵌入式技術(shù) ? 作者:嵌入式技術(shù) ? 2022-08-18 21:40 ? 次閱讀

C語言可變形參

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

1.可變形參相關(guān)函數(shù)

#include 
void va_start(va_list ap, last);
type va_arg(va_list ap, type);
void va_end(va_list ap);
void va_copy(va_list dest, va_list src);

?va_start完成ap指針初始化,以供va_arg和va_end后續(xù)使用,該函數(shù)必須先調(diào)用。參數(shù)last是變量參數(shù)列表前最后一個參數(shù)的名稱;
va_arg實現(xiàn)下一個參數(shù)的類型和值的獲取。參數(shù)ap是由va_start初始化的參數(shù)列表。對va_arg()的每次調(diào)用都會修改ap,以便獲取下一個參數(shù)。參數(shù)類型type是一個指定的數(shù)據(jù)類型。
va_end將ap指向NULL。
va_copy將參數(shù)列表src復(fù)制到dest中,該函數(shù)在c99才有定義。

2.可變形參模仿printf函數(shù)

#include 
#include 
void my_printf(const char *fmt,...);
int main()
{
	my_printf("%s\n","123456");
	my_printf("%d %%\n",55);
	my_printf("%f\n",789.56);
	my_printf("%c\n",'c');
	my_printf("%ld,%lf\n",1234567890123,45.789625);
}
void my_printf(const char *fmt,...)
{
	va_list ap;
	va_start(ap,fmt);//ap=fmt
	char c,*s;
	int d;
	float f;
	long l;
	double b;
	while(*fmt)
	{
		if(*fmt!='%')
		{
			putchar(*fmt);//輸出%前所有字符
		}
		else 
		{
			fmt++;//跳過%
			switch(*fmt)
			{
				case 'c'://字符
					c=(char )va_arg(ap,int);//字符存儲時按int空間處理
					fprintf(stdout,"%c",c);
					break;
				case 'd'://整數(shù)
					d=va_arg(ap,int);
					fprintf(stdout,"%d",d);
					break;
				case 'f'://浮點數(shù)
					f=(float)va_arg(ap,double);//浮點數(shù)據(jù)處理時按double處理
					fprintf(stdout,"%f",f);
					break;
				case '%'://%%
					putchar(*fmt);
					break;
				case 's'://字符串
					s=va_arg(ap,char *);
					fprintf(stdout,"%s",s);
					break;
				case 'l':
					fmt++;
					if(*fmt=='d')//長整形%ld
					{
						l=va_arg(ap,long);
						fprintf(stdout,"%ld",l);
					}
					else if(*fmt=='f')//雙精度浮點型%lf
					{
						b=va_arg(ap,double);
						fprintf(stdout,"%lf",b);
					}
					break;
			}
		}
		fmt++;
	}
	va_end(ap);//ap=NULL
}

??運行效果:

[wbyq@wbyq 0414work]$ gcc main.c 
[wbyq@wbyq 0414work]$ ./a.out 
123456
55 %
789.559998
c
1234567890123,45.789625

審核編輯 黃昊宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7575

    瀏覽量

    134119
收藏 人收藏

    評論

    相關(guān)推薦

    C語言——可變參數(shù)問題.

    ;The value is %d!\n", value);  這種可變參數(shù)可以說是C語言一個比較難理解的部分,這里會由幾個問題引發(fā)一些對它的分析。   注意:在C++中有函數(shù)重載(ov
    發(fā)表于 04-20 15:17

    C語言可變參數(shù)的定義

    C語言可變參數(shù)的定義。//可變參數(shù)用...來表示void TRACE(char *format, ...)(2)可變參數(shù)函數(shù)需要用到的宏
    發(fā)表于 07-14 07:43

    怎么設(shè)計c語言可變長參數(shù)函數(shù)?

    怎么設(shè)計c語言可變長參數(shù)函數(shù)
    發(fā)表于 10-27 07:10

    可變形電池正在研發(fā),彎曲手機更近了

    日前韓國科學(xué)家發(fā)表了論文,稱“世界上首款”可變形鋰電池的研發(fā)工作非常順利,這款產(chǎn)品的性能已經(jīng)相對穩(wěn)定。該產(chǎn)品的研發(fā)為今后可變形手機的到來奠定了基礎(chǔ)。根據(jù)韓國聯(lián)合通
    發(fā)表于 01-16 10:10 ?768次閱讀

    基于稀疏表示的可變形部件模型目標檢測

    基于可變形部件模型DPM的目標檢測算法采用方向梯度直方圖HOG進行特征表示,由于HOG無法處理模糊的邊界而且忽略了平滑的特征區(qū)域,從而影響了DPM算法的性能。為了提高DPM的性能,提出了一種基于稀疏
    發(fā)表于 11-21 16:52 ?11次下載

    融合分支定界的可變形部件模型的行人檢測

    針對可變形部件模型(DPM)算法在行人檢測領(lǐng)域中的檢測精度高,但由于在特征提取和行人定位兩步中的計算量過大,導(dǎo)致檢測速度過慢而不能應(yīng)用于實時行人檢測的問題,提出了一種融合分支定界算法和級聯(lián)
    發(fā)表于 11-30 15:52 ?0次下載

    基于可變形卷積網(wǎng)絡(luò)的恒星大氣物理參數(shù)檢測

    基于可變形卷積網(wǎng)絡(luò)的恒星大氣物理參數(shù)檢測
    發(fā)表于 06-18 14:53 ?15次下載

    基于可變形卷積網(wǎng)絡(luò)的恒星大氣物理參數(shù)測量

    基于可變形卷積網(wǎng)絡(luò)的恒星大氣物理參數(shù)測量
    發(fā)表于 07-02 16:07 ?14次下載

    C語言-函數(shù)的定義、聲明、傳

    C語言里函數(shù)是非常重要的知識點,一個完整的C語言程序就是由主函數(shù)和各個子函數(shù)組成的,主函數(shù)調(diào)用子函數(shù)完成各個邏輯功能。 這篇文章作為C
    的頭像 發(fā)表于 08-14 09:57 ?1802次閱讀

    C語言-函數(shù)的可變形(不定形)

    這篇文章介紹C語言函數(shù)的不定參數(shù)、可變參數(shù) 形,實現(xiàn)printf一樣的傳效果。
    的頭像 發(fā)表于 08-14 09:58 ?2408次閱讀

    C語言-指針作為函數(shù)形類型

    C語言函數(shù)里最常用就是指針傳和返回地址,特別是字符串處理中,經(jīng)常需要封裝各種功能函數(shù)完成數(shù)據(jù)處理。
    的頭像 發(fā)表于 08-14 10:05 ?1689次閱讀

    C語言可變參數(shù)的使用詳解

    c/c++語言具備一個不同于其他編程語言的的特性,即支持可變參數(shù)。
    的頭像 發(fā)表于 03-08 09:47 ?1500次閱讀

    C語言函數(shù)參數(shù)介紹

    C語言數(shù)組元素作函數(shù)實參 數(shù)組元素可以用作函數(shù)實參,不能用作形。 C語言在用數(shù)組元素作函數(shù)實參時,把實參的值傳給形
    的頭像 發(fā)表于 03-10 14:30 ?2145次閱讀

    Python函數(shù)形的分類

    的分類 形的分類可以分為六種: 帶有默認值的位置形 不帶默認值的位置形 帶有默認值的關(guān)鍵字形 不帶默認值的關(guān)鍵字形
    的頭像 發(fā)表于 11-14 11:19 ?670次閱讀

    C語言中的可變參數(shù)介紹

    C 語言為這種情況提供了一個解決方案,它允許您定義一個函數(shù),能根據(jù)具體的需求接受可變數(shù)量的參數(shù)
    發(fā)表于 02-28 14:00 ?225次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>中的<b class='flag-5'>可變</b>參數(shù)介紹