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

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

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

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

}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿拉善左旗| 那坡县| 商河县| 青铜峡市| 佛山市| 星座| 竹北市| 上犹县| 三江| 滨海县| 屏南县| 莒南县| 万荣县| 吴川市| 滨州市| 大城县| 盐源县| 宜兴市| 阿克苏市| 乐安县| 历史| 汉沽区| 穆棱市| 江北区| 子长县| 深水埗区| 茶陵县| 福贡县| 沧州市| 托克逊县| 无极县| 鲜城| 青神县| 井冈山市| 灌南县| 若尔盖县| 河北省| 芮城县| 高淳县| 右玉县| 沙田区|