2016-10-31 74 views
-5

我將64個int數組傳遞給c中的函數。當我在函數內部打印p [1]時,與在主函數外部打印p [1]時不顯示相同的值。我得到的輸出是 「這是P [1]:0」 和 「此爲p [1]在函數內部:1」當我將數組傳遞給函數時,數值發生變化

下面

是在主代碼:

for (int i=0; i < 64; i++){ 
if (((i+1)%4) == 0){ 
    int new = ((i+1)/4)-1; 
    printf("this is p[1]: %d\n", p[1]); 
    gg[new] = getgg(&g, &p, i-3); 
    gp[new] = getgp(&p, i-3); 
} 
} 

這裏是我的功能:

int getgg(int (*g)[64], int (*p)[64], int i){ 
    printf("this is p[1] inside the function: %d\n", *p[1]); 
    if((*g[i+3]) || (*p[i+3] && *g[i+2]) || (*p[i+3] && *g[i+2] && *g[i+1]) || (*p[i+3] && *p[i+2] && *p[i+1] && *g[i])){ 
return 1; 
} 
else{ 
return 0; 
} 
} 
+2

請提供[mcve]。包括如何聲明'p'。 – kaylum

+0

可能你的意思是'(* g)[i + 3]'等功能內部,很難肯定地說沒有MCVE –

+0

這是[IOCCC]的代碼(http://www.ioccc.org/) ? – Lundin

回答

-1

有一個巨大的混亂,你需要習慣指針!

好吧,你的功能得到gp這是int *。你給他們的是&g&p,其中gp也是int *。所以你傳遞給你的函數類型int **

g[i+3]*(g+i+3)因此,讓我們看看*g[i+3]是什麼。

g是數組中第一個元素地址的地址。 g[i+3]i+3地址旁邊的地點等等等等等...所以*g[i+3]是那個內容!

這是你可能不知道的事情!

試圖通過gp代替&g&p並從功能刪除所有*

+0

函數期望'int(*)[64]',而不是'int *'。你也聲稱'g'和'p'(iin'main')是'int *',但是這個問題還不清楚。他們可能是陣列。 –

+0

哦,是的。沒有注意到[64]部分,可能是因爲時間和疲勞。編輯我的答案,現在它糾正了錯誤,但它改變了很多功能。 – elikatsis