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

首頁 > 學院 > 開發(fā)設計 > 正文

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

2019-11-11 01:14:58
字體:
來源:轉載
供稿:網友
/*可變參數列表可變參數列表是通過宏來實現的,這些宏定義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字符,然后把這個字符打印出來*/

}


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 民权县| 新巴尔虎左旗| 德兴市| 合山市| 方城县| 绥芬河市| 周宁县| 专栏| 和田县| 广丰县| 蓝田县| 盖州市| 武夷山市| 浏阳市| 马龙县| 寿阳县| 塘沽区| 墨玉县| 汝城县| 得荣县| 衢州市| 广水市| 铁岭市| 富蕴县| 陇川县| 汾阳市| 章丘市| 长乐市| 利辛县| 云龙县| 资溪县| 彭州市| 平阳县| 宁陵县| 汽车| 浦东新区| 吴忠市| 德安县| 东乌珠穆沁旗| 通州区| 南平市|