printf()函數(shù)在處理數(shù)組時(shí)只把數(shù)組首地址壓入棧而并不壓入數(shù)組下標(biāo)變量的所有內(nèi)容(因?yàn)闆]有必要,有首地址就可以輸出了)。
站在用戶的角度思考問題,與客戶深入溝通,找到西山網(wǎng)站設(shè)計(jì)與西山網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋西山地區(qū)。
其運(yùn)算順序是由這個(gè)函數(shù)參數(shù)的入棧順序決定的。printf的入棧順序是自右向左。c語言當(dāng)中函數(shù)的聲明時(shí)要給函數(shù)調(diào)用約定,即入棧的順序,棧的管理等。
printf()函數(shù)是格式化輸出函數(shù), 一般用于向標(biāo)準(zhǔn)輸出設(shè)備按規(guī)定格式輸出信息。在編寫程序時(shí)經(jīng)常會(huì)用到此函數(shù)。函數(shù)的原型為:(int printf(const char *format, ...),函數(shù)返回值為整型。
在printf執(zhí)行完后i才會(huì)自加。printf函數(shù)參數(shù)入棧時(shí)i的值仍然為1。
棧都是后進(jìn)先出的,所以應(yīng)該反過來入棧,和參數(shù)的編寫順序相反。你自己畫個(gè)圖,就一目了然了。
標(biāo)準(zhǔn)C參數(shù)壓棧次序是反向壓棧,也就是從右到左。因?yàn)镃要把不定參數(shù)...放在最右邊,為了高效率定位參數(shù),所以只能從右到左壓棧,這樣第一個(gè)參數(shù)最靠近棧頂。
[2]。這個(gè)結(jié)果也說明printf()函數(shù)確實(shí)是從參數(shù)列表的右端開始執(zhí)行的。那么造成題目中的現(xiàn)象是什么原因呢?這是由C/C++對(duì)數(shù)組的處理機(jī)制造成的。
這個(gè)時(shí)候,程序當(dāng)前運(yùn)行時(shí)所用的參數(shù)如果不進(jìn)行保存的話,那么當(dāng)執(zhí)行完被調(diào)用函數(shù)跳轉(zhuǎn)回原先的函數(shù)時(shí),缺少必要的參數(shù),程序就無法正常執(zhí)行。
前者需要地址,而后者則直接傳值。如果你了解指針,就很容易明白。當(dāng)給函數(shù)以值傳遞的方式傳遞參數(shù),該參數(shù)是在函數(shù)內(nèi)部建立了一個(gè)副本,是不會(huì)影響到傳入的那個(gè)參數(shù)值。
不光printf函數(shù)是這樣,你自己寫個(gè)函數(shù),所有參數(shù)也是自右像左計(jì)算的。原因是,如果一個(gè)函數(shù)有多個(gè)參數(shù),比如 int fun (int a, int b, int c);調(diào)用時(shí),總是從最后一個(gè)參數(shù)開始?jí)簵!?/p>
其運(yùn)算順序是由這個(gè)函數(shù)參數(shù)的入棧順序決定的。printf的入棧順序是自右向左。c語言當(dāng)中函數(shù)的聲明時(shí)要給函數(shù)調(diào)用約定,即入棧的順序,棧的管理等。