請向我解釋為什么這個程式列印12 12為輸出,而不是7 7?
#include <stdio.h>
int addmult(int ii, int jj){
int kk, ll;
kk = ii jj;
ll = ii * jj;
return(kk,ll);
}
int main(void) {
int i = 3, j = 4, k, l;
k = addmult(i,j);
l = addmult(i,j);
printf("\n%d\n%d",k,l);
}
uj5u.com熱心網友回復:
C 不允許從同一個函式回傳多個值。您可以創建一個結構來保存函式內的 2 個值并回傳它,但更好的方法是每次只呼叫一次函式。
uj5u.com熱心網友回復:
k,ll
是逗號運算子。C 標準說:
逗號運算子的左運算元被計算為空運算式;在它的評估和右運算元的評估之間有一個序列點。然后評估正確的運算元;結果有其型別和值。
所以
return(kk,ll);
是相同的
return ll;
并且代碼可以簡化為
int addmult(int ii, int jj){
int ll;
ll = ii * jj;
return ll;
}
這很明顯它會為兩個呼叫回傳 12。
uj5u.com熱心網友回復:
正如上面其他人已經回答的那樣,C 語言不允許從函式回傳多個值(它們僅限于 Python 等語言)。
以下是如何struct在 C 中實作您想要的目的
#include <stdio.h>
struct Pair {
int x;
int y;
};
struct Pair addmult(int ii, int jj){
int kk, ll;
kk = ii jj;
ll = ii * jj;
struct Pair p = {kk, ll};
return p;
}
int main(){
int i = 3, j = 4, k, l;
struct Pair p = addmult(i, j);
k = p.x;
l = p.y;
printf("\n%d\n%d\n",k,l);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/400288.html
標籤:C
下一篇:無法洗掉我的鏈表的頭節點
