[英]I'm not getting the output, I was assuming
# include <stdio.h>
void fun ( int, int ) ;
int main( )
{
int i = 5, j = 2 ;
fun ( i, j ) ;
printf ( "%d %d\n", i, j ) ;
return 0 ;
}
void fun ( int i, int j )
{
i = i * i ;
j = j * j ;
}
用 C 編寫的程序。在輸出中,我的編譯器給了我 5 2 但它應該給我 25 4 這段代碼有什么問題?為什么這是給 5 2 作為輸出?
正如 AKX 在評論中所說,
i 和 j 通過值傳遞給 fun ,而不是通過引用。 在樂趣內修改它們不會在樂趣之外修改它們
要修改函數內的變量,您必須傳遞一個指向它的指針。 所以你的最終代碼可能如下所示:
# include <stdio.h>
void fun ( int*, int* ) ;
int main( )
{
int i = 5, j = 2 ;
fun (&i,&j) ;
printf ( "%d %d\n", i, j ) ;
return 0 ;
}
void fun ( int* i, int* j )
{
*i = (*i) * (*i) ;
*j = (*j) * (*j) ;
}
您正在按值傳遞變量(這意味着您傳遞的是變量的副本,而不是變量本身)。 因此,當您在 fun 函數中進行計算時,您實際上並未更改變量,而只是更改了對它們所做的副本。 您可以做的是通過引用傳遞這些值,但是 C 沒有引用,因此,您應該使用指針:
void fun ( int *i, int *j )
{
*i = (*i) * (*i); // You should put the stars before the variables in order to deference it
*j = (*j) * (*j);
}
當你調用函數時,你應該傳遞這樣的參數:
fun(&i, &j);
# include <stdio.h>
void fun(int &, int &);
int main()
{
int i = 5, j = 2;
fun(i, j);
printf("%d %d\n", i, j);
return 0;
}
void fun(int & i, int & j)
{
i = i * i;
j = j * j;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.