ページ 11

無題

Posted: 2009年1月21日(水) 18:24
by TT
はじめまして。疑問があったので質問させていただきます。
#include <stdio.h>

int main(void){
	int i;
	int x;

	i = 1;
	int x = 2 * i;
	printf("x = %d\n", x);
	i = 2;
	printf("x = %d\n", x);

	return 0;
}
これを実行すると"x = 2 x = 2"となってしまいます。i = 2が代入されて"x = 2 x = 4"とはならないのでしょうか。
またこれを"printf("x = %d\n", 2 * i);"と記述する以外で実現するにはどうすればいいのでしょうか。

Re:無題

Posted: 2009年1月21日(水) 18:37
by Dixq (管理人)
同じ変数名が2回宣言されてしまっていますよ。

なお、トピックにはわかりやすい名前を付けて下さい。

Re:無題

Posted: 2009年1月21日(水) 18:37
by 御津凪
ただの変数は他の変数の値の変更によって、値が変化することはありません。
(VBなどのプロパティではないので)
void update(int& x,int i){
    x = 2 * i;
}

int main(void){
    int i;
    int x;

    i = 1;
    update(x,i);
    printf("x = %d\n", x);
    i = 2;
    update(x,i);
    printf("x = %d\n", x);

    return 0;
}
これなら恐らく希望通りの動作になると思いますがどうでしょうか。
あと、 x が二度宣言されています。(警告出ていませんか?)

Re:無題

Posted: 2009年1月21日(水) 18:42
by ざこ
プログラムは上から下にいってますから後からi=2としても代入されないのでは?
int main(void){
	int i;
	int x;

	i = 1;
	x = 2 * i;
	printf("x = %d\n", x);
	i = 2;
         x = 2 * i;

	printf("x = %d\n", x);

	return 0;
}
にしたら2,4になりました。同じ文2回きてしまってるので御津さんのように関数使った方がいいですね。

Re:無題

Posted: 2009年1月21日(水) 18:43
by kazuoni
>>御津凪さん
void update(int *x,int i){
    *x = 2 * i;
}

int main(void){

    int i;
    int x;

    i = 1;
    update(&x,i);
    printf("x = %d\n", x);

    i = 2;
    update(&x,i);
    printf("x = %d\n", x);

    return 0;

}
じゃないですか?

Re:無題

Posted: 2009年1月21日(水) 18:49
by non
C++の参照渡しですね。

Re:無題

Posted: 2009年1月21日(水) 18:49
by 御津凪
> kazuoni さん

コードの後に変数宣言があったので、C++ のコードとして解釈しました。
なのであのコードは C++ のコードです。
(C++ のコードだというのを書き忘れていました。すみません)

Re:無題

Posted: 2009年1月21日(水) 18:54
by kazuoni
C++ではこんな風に書けるのですか・・・w
そろそろ自分もC++始めます^^;
Cもままならない感じですが・・・。

自分こそ、無知のわりに変な突っ込みして申し訳ありませんでした。
nonさん、御津凪さんご指摘ありがとうございました。

Re:無題

Posted: 2009年1月21日(水) 19:22
by フリオ
 
>コードの後に変数宣言があったので、C++ のコードとして解釈しました。
>なのであのコードは C++ のコードです。

 現行の"C"(C99)では、ブロックの途中で変数を宣言することが許されているので、
それだけで質問のコードが"C++"と解釈することは出来ないです。

 むしろ、コード全体の様子を見ると、"C"と解釈する方が自然ではないでしょうか。
 

Re:無題

Posted: 2009年1月21日(水) 19:40
by TT
すいません。間違えたのを貼り付けてました。実行したのは宣言を一回に修正した後のものです。

printfでxの式が呼び出されるのだと思っていました。関数を作って使おうと思います。
お答えいただきありがとうございました。

あと勉強してるのはC++なんですが質問のためにCで書いたつもりです。混乱させてしまったようで申し訳ありません。