2012-06-04 21 views
0

這是一個在函數自變量中使用副作用的遞歸代碼。在K & R中,我找到了一條語句 ,說C標準指定參數上的所有副作用在函數被調用之前生效第二版)。但輸出到上面的代碼是矛盾的。任何人都可以幫助我。函數自變量的副作用

void reverse(int* array,int i,int j) 
{ 
    `int temp; 
    if(i>j) 

    return ; 
    else{ 
    temp=array[i]; 
    array[i]=array[j]; 
    array[j]=temp; 
    //i++; 
    //j--; 
    reverse(array,i++,j--); 
    } 
} ' 

PS:輸出是分段故障

+0

非常感謝...... – Dhatri

+0

如果您的問題已被回答,請將其標記爲如此。 –

+0

用副作用編程只是一個非常糟糕的主意。沒有功能原因來寫這樣的事情,只是不這樣做。 –

回答

2

所有副作用完成,所以i的值和j的之前函數調用改變。

但是特快i++j--的值仍然是i和j之前的值。

3

的確,在函數調用之前變量會增加,但這些變量對聲明它們的函數是本地的(在本例中爲一個遞歸函數調用框架),並且在使用後綴運算符時,運算符返回的值不是更新的值,而是初始值。因此,最終傳遞爲參數的值沒有正確更新,您的函數將永遠不會終止。爲了遞增變量並同時返回並傳入更新的值,必須使用前綴運算符,即++i++j