2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、C 語言可變參數(shù)研究作者: 來源:zz 發(fā)表時(shí)間:2006-11-16 瀏覽次數(shù): 364 字號(hào):大 中 小一. 何謂可變參數(shù)int printf( const char* format, ...);這是使用過 C 語言的人所再熟悉不過的 printf 函數(shù)原型,它的參數(shù)中就有固定參數(shù) format和可變參數(shù)(用”…”表示). 而我們又可以用各種方式來調(diào)用 printf,如:printf(

2、“%d“,value);printf(“%s“,str);printf(“the number is %d ,string is:%s“, value, str);二.實(shí)現(xiàn)原理C 語言用宏來處理這些可變參數(shù)。這些宏看起來很復(fù)雜,其實(shí)原理挺簡單,就是根據(jù)參數(shù)入棧的特點(diǎn)從最靠近第一個(gè)可變參數(shù)的固定參數(shù)開始,依次獲取每個(gè)可變參數(shù)的地址。下面我們來分析這些宏。在 VC 中的 stdarg.h 頭文件中,針對(duì)不同平臺(tái)有不同的宏定義,我們選取 X8

3、6 平臺(tái)下的宏定義:typedef char *va_list;/*把 va_list 被定義成 char*,這是因?yàn)樵谖覀兡壳八玫?PC 機(jī)上,字符指針類型可以用來存儲(chǔ)內(nèi)存單元地址。而在有的機(jī)器上 va_list 是被定義成 void*的*/#define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) 使 ap 不再指向堆棧,而是跟 NULL 一樣.有些直接定義為((void*)0),這

4、樣編譯器不會(huì)為 va_end 產(chǎn)生代碼,例如 gcc 在 linux 的 x86 平臺(tái)就是這樣定義的. 在這里大家要注意一個(gè)問題:由于參數(shù)的地址用于 va_start 宏,所以參數(shù)不能聲明為寄存器變量或作為函數(shù)或數(shù)組類型. */以下再用圖來表示:putchar(c); //照原樣輸出字符}else{//按格式字符輸出數(shù)據(jù)switch(*++fmt){case 'd':printf(“%d“,*((int*)pArg))

5、;break;case 'x':printf(“%#x“,*((int*)pArg));break;default:break;}pArg += sizeof(int); //等價(jià)于原來的 va_arg}++fmt;}while (*fmt != '\0');pArg = NULL; //等價(jià)于 va_endreturn;}int main(int argc, char* argv[]){int i =

6、1234;int j = 5678;myprintf(“the first test:i=%d“,i,j);myprintf(“the secend test:i=%d; %x;j=%d;“,i,0xabcd,j);system(“pause“);return 0;}在 intel+win2k+vc6 的機(jī)器執(zhí)行結(jié)果如下:the first test:i=1234the secend test:i=1234; 0xabcd;j=5678

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論