2017-11-27 2 views
0

私はこのコードを書いて、デフォルトのGCCコンパイラを使ってコードブロックでコンパイルしようとしました。
オプション1を指定すると、この出力が「hello world6356744」になります。 何が起こっているのか説明してください。このcプログラムのコンパイルと実行後に不明なエラーが発生しました

#include<stdio.h> 
#include<stdlib.h> 

int fun1(int x,int y) 
{ 
printf("hello world"); 
return x+y; 
} 
int fun2() 
{ 
return 0; 
} 


int main() 
{ 
printf("type 1 for * or type 2 for #"); 
int a; 
scanf("%d", &a); 

int ca1; 

switch(a) 
{ 
case 1: 

    ca1=fun1(2,3); 
    printf("%d", &ca1); 
    break; 

case 2: 
    fun2(); 
    break; 
default: 
    printf("invalid input"); 

} 
return 0; 
} 

https://i.stack.imgur.com/A5PhT.png

+0

あなたは何をすると思いますか?その出力は私が期待するものです –

答えて

2

あなたはライン28上&とポインタのアドレスを印刷している&を外し、printf関数は正常に動作するはずです。 Printfはアドレスを取るのではなく、値を取ります。

scanfを使用して入力を読み取るときは、変数/ポインタのアドレスを指定すると、scanfは渡す変数/ポインタを直接変更するためです。

+0

問題はありません。熟練したcやC++開発者でもこの問題が発生します。変数を「参照渡し」と「変数を値渡し」に専念する本には全章があります。 – Katianie

+0

https://stackoverflow.com/help/someone-answers – Yunnosch

関連する問題