無題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
TT

無題

#1

投稿記事 by TT » 16年前

はじめまして。疑問があったので質問させていただきます。
#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);"と記述する以外で実現するにはどうすればいいのでしょうか。

Dixq (管理人)

Re:無題

#2

投稿記事 by Dixq (管理人) » 16年前

同じ変数名が2回宣言されてしまっていますよ。

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

御津凪

Re:無題

#3

投稿記事 by 御津凪 » 16年前

ただの変数は他の変数の値の変更によって、値が変化することはありません。
(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:無題

#4

投稿記事 by ざこ » 16年前

プログラムは上から下にいってますから後から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回きてしまってるので御津さんのように関数使った方がいいですね。

kazuoni

Re:無題

#5

投稿記事 by kazuoni » 16年前

>>御津凪さん
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;

}
じゃないですか?

non

Re:無題

#6

投稿記事 by non » 16年前

C++の参照渡しですね。

御津凪

Re:無題

#7

投稿記事 by 御津凪 » 16年前

> kazuoni さん

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

kazuoni

Re:無題

#8

投稿記事 by kazuoni » 16年前

C++ではこんな風に書けるのですか・・・w
そろそろ自分もC++始めます^^;
Cもままならない感じですが・・・。

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

フリオ

Re:無題

#9

投稿記事 by フリオ » 16年前

 
>コードの後に変数宣言があったので、C++ のコードとして解釈しました。
>なのであのコードは C++ のコードです。

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

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

TT

Re:無題

#10

投稿記事 by TT » 16年前

すいません。間違えたのを貼り付けてました。実行したのは宣言を一回に修正した後のものです。

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

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

閉鎖

“C言語何でも質問掲示板” へ戻る