今天分享關于C語言函數(shù)參數(shù)壓棧順序的問題,。按照日常習慣,C語言的函數(shù)參數(shù)壓棧順序是從左到右吧,?但是事實卻是相反的,,C語言函數(shù)參數(shù)壓棧順序是從右到左的。下面看一個程序: #include <stdio.h> 該程序輸出結果為: a = 1, &a = 0x61fef0 b = 2, &b = 0x61fef4 c = 3, &c = 0x61fef8 我們知道,,棧是向下生長的,,即從高地址向低地址的方向分配內(nèi)存。由程序輸出結果可知,,變量c的值首先存儲在高地址,,其次是b,最后低地址保存a,。即函數(shù)的參數(shù)壓棧的順序是從右到左,。 為什么是從右到左呢?下面使用printf函數(shù)來分析: printf函數(shù)的原型是:int printf(const char *format,...); 我們都知道,,printf是個變參函數(shù),。那么,其參數(shù)的個數(shù)是如何確定的呢,,靠的就是format,,如果format首先被壓入棧中,就無法知道還有多少個參數(shù)還沒入棧了,;所以,,format應該最后入棧,才能確定參數(shù)的個數(shù),,也即符合參數(shù)入棧順序為“從右到左”的規(guī)則,。 以上就是關于函數(shù)參數(shù)壓棧順序的總結,,希望能對大家有幫助。 感謝您的閱讀,,歡迎持續(xù)關注,! 【每日一句】 你所做的一切努力并不會立即給你想要的一切,但可以讓你逐漸成為你想成為的那一種人,。
|
|