ID非公開

2020/8/4 6:23

33回答

C言語について

C言語について 教科書を見ていて配列のコピーの内容で int a[3] = {38, 127, 18}; // 3つの要素を持つ配列を宣言し,初期化をする int b[3]; // 3つの要素を持てる配列を宣言し,初期化をしない int n = sizeof(a) / sizeof(a[0]); // 要素数 // 配列 a を b にコピー for (int i = 0; i < n; i++) { b[i] = a[i]; // 配列 a の i 番目の要素を配列 b の i 番目の要素へ代入 } // 配列 b を表示 for (int i = 0; i < n; i++) { printf("b[%d] = %d\n", i, b[i]); } for (int i = 0; i < n; i++) { b[i] = a[i]; // 配列 a の i 番目の要素を配列 b の i 番目の要素へ代入 } // 配列 b を表示 for (int i = 0; i < n; i++) { printf("b[%d] = %d\n", i, b[i]); 初めのfor文のiは何を表していてなぜこの形がa=bと表せるのですか

C言語関連51閲覧

ベストアンサー

0

少々難しい話をすると、それを行っても、a=bにもa==bにもなりません。 あくまでも、a配列の各要素と、b配列の各要素が同じ値になるというだけです。 C言語では、配列のaに対して、aとだけ単体で書くと、配列が置かれているメモリの位置の頭のアドレスになるというルールがあります。 aとbはそれぞれ別の配列なので、別々のアドレスを持ちます。 なので、a==b(aのアドレスとbのアドレスが同じかどうか?)は、「偽(違う)」という結果になります。 また、このアドレス(位置)は、宣言した段階で決められていて固定なので、変えることはできません。 その為、a=b(aの位置をbのいちに変更せよという命令)は、エラーになります。 forが何をやっているかは、教科書のfor文の仕組みを読み直して下さい。 for文は3つの式を持ち、1つ目を最初に一度だけ実行し、 2つ目の値が「真」である間、 for文に続く文を実行し、 3つ目の式を、実行した後、 2つ目の式の判定に戻る ということを繰り返す構文です。 for (int i = 0; i < n; i++) { b[i] = a[i]; } は int i=0; if(!(i<n)) end; b[i] = a[i]; i++; if(!(i<n)) end; b[i] = a[i]; i++; if(!(i<n)) end; b[i] = a[i]; i++; : となります。

その他の回答(2件)

0

初めのfor文のiは何を表していて ==>初めのfor文とは、、、、 iは配列の何番目の要素なのかを格納する変数です。 0からn-1まで変動しますけど、、、 この形がa=bと表せるのですか ==>配列aの値を配列bに代入しているから、、、、 C言語では等しい場合はA==Bと記述します。 算数ではA+B=Cと記述するがC言語ではC=A+Bと記述します。 そのようにC言語を作った人が決めたので、それに従うだけです。 a=1,b=2の場合 if(a=b)は真です。 if(a==b)は偽です。

0

>なぜこの形がa=bと表せるのですか 逆でして、b[i]=a[i]と表すと内容をコピーする、と決めたからです なので、「この形がa=bと表せる」ではなく、「コピーする際にはb[i] = a[i]と書く」とか「コピーを表すにはb[i] = a[i]と書く」というルールを決めたからです