簡體   English   中英

我沒有得到輸出,我假設

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM