国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C語言可變參數列表詳述及實現printf函數

2019-11-10 23:27:20
字體:
來源:轉載
供稿:網友
/*可變參數列表可變參數列表是通過宏來實現的,這些宏定義stdarg.h頭文件,它是標準庫的一部分。這個頭文件聲明了一個類型va_list和三個宏——va_start、va_arg、va_end。我們可以聲明一個類型為va_list的變量,與這幾個宏配合使用,訪問參數的值。注意:1.這些宏無法判斷實際存在的參數的數量。          2.這些宏無法判斷每個參數的類型。*///測試用例:#include<stdio.h>#include<windows.h>#include<stdarg.h>#include<assert.h>void my_PRintf(char*format, ...);void myPutInt(int a);int main(){int i = 123;char j = 'w';char*str = "happy everyday!";my_printf("a=%d/nb=%c/n*str=%s/n", i, j, str);system("pause");return 0;}//定義my_prinf,實現打印3種類型 int char 字符串void my_printf(char*format, ...){assert(format);va_list va_cur;//定義一個va_list類型變量va_curva_start(va_cur, format);// 初始化va_arg這個變量。它的第一個參數是va_ list變量的名字,                       //第二個參數是省略號前最后一個有名字的參數。const char *start = format;while (*start){if (*start == '%'){*start++;switch (*start){case 'd':{    int _int = va_arg(va_cur, int);/*為了訪問可變參數,需要使用va_arg,                               這個宏接受兩個參數:va_list變量和參數列表中下一個參數的類型*/myPutInt(_int);start++;break;}case 'c':{char _char = va_arg(va_cur, char);putchar(_char);start++;break;}case 's':{char*_str= va_arg(va_cur, char*);   while (*_str){putchar(*_str++);}start++;}}}else{putchar(*start);*start++;}}va_end(va_cur);//當訪問完最后一個可變參數之后,需要調用va_end}//遞歸將一個整型值轉換為字符并打印void myPutInt(int a){int value;value= a / 10;if (value){myPutInt(value);}putchar(a % 10 + '0');/*每次調用putchar函數得到變量value的最后一個數字,并對value進行模10 取余運算,其結果是一個0到9之間的整數。并把它與字符常量‘0’相加,其 結果是對應這個數字的ASCII字符,然后把這個字符打印出來*/

}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 肥城市| 沂水县| 临城县| 长葛市| 湄潭县| 博野县| 东乡族自治县| 玉龙| 璧山县| 瓦房店市| 山丹县| 昌吉市| 天台县| 祥云县| 军事| 甘孜| 吉木乃县| 汝城县| 得荣县| 罗甸县| 邮箱| 定兴县| 昆山市| 浑源县| 施秉县| 铜川市| 和龙市| 喀喇沁旗| 丘北县| 怀宁县| 望奎县| 新宁县| 宜兰县| 耿马| 大关县| 梧州市| 乌拉特中旗| 当涂县| 南阳市| 招远市| 三亚市|