眾所周知C語言函式傳參是從右向左依次入堆疊的,呼叫print()函式,然后傳入不同的引數,函式呼叫結束后,遵循“先進后出”所以會下面f()函式的列印結果是4321
#include <stdio.h>
void f(int i){
printf("%d,%d,%d,%d\n", i, i++, i++, i++);
}
void f2(int i){
printf("%d,%d,%d,%d\n", i, i++, ++i, ++i);
}
int main(void)
{
int i = 1;
int a=1;
f(i);
f2(i);
return 0;
}
但是f2()函式的列印結果是4344,按照“先進后出” 的入堆疊原理,應該是4332(但是是錯誤的),有人知道原因的嗎?
uj5u.com熱心網友回復:
++i回傳值是遞增后的i,i++回傳值是臨時變數(遞增前的i的值)所以f2相當于
printf(i, 最后一次遞增前的i, i, i)
uj5u.com熱心網友回復:
眾所周知說錯了 后面的內容都不用看沒有這個眾所周知 那是錯的
這里決定因素是求值順序
和入堆疊順序毫無關系
輸出結果沒意義 編譯器有有多種不同理解
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/60593.html
標籤:C語言
上一篇:大佬救命,我的單鏈表運行最后一個合并函式時小黑窗自動關閉了這是為什么呢
下一篇:郁悶,所有提醒框都不居中,全是螢屏偏有下測,怎么回事呢MessageBox(Handle,'學號禁止為空!','提示',MB_ICONWARNING);
