C/C++の変数と配列

沖林正紀
2008-03-11 08:00:00
  • このエントリーをはてなブックマークに追加

変数とは

 変数(へんすう)とは、プログラム内でデータを保持するときの目印となるもので、データが何の目的で利用されているか分かりやすい名前をつけておくと、ソースコードの保守がしやすくなる。また、変数で保持するデータを何度も入れ替えることができるので、複数のデータに対して同じ処理を繰り返し行うときに、大いに役に立つ。

変数の宣言

 C/C++言語では、変数を利用する前に、必ずデータ型と名前を記述しておかなくてはならない。これを「変数の宣言」という。変数を利用した”Hello, World!”の例を以下に示す。

    #include 

    int main( void )  {

      char a[ 14 ] = "Hello, World!";  /* 変数の宣言(半角文字13文字分)と値の代入 */

      printf( "%s\n", a );

      return 0;
    }

 ここでchar a[14]は、char型の半角13文字分のデータ(文字列)を保持するための変数の名前をaとする、という意味だ。続く = は変数にデータを保持させることを表す。これを「変数に値(あたい)を代入する」という。”Hello, World!”は変数aに代入する値ということになる。

 宣言と値の代入は必ずしも同時に行わなくても良い。次に、2つの数値を計算した結果を出力する例を示す。同じデータ型の変数を複数宣言するときは、この例のように変数名を,(カンマ)で区切って記述できる。

    #include 

    int main( void )  {

      int a, b; /* int型のデータを保持する変数aとbを宣言 */

      a = 3;    /* 変数aに値3を代入 */
      b = 2;    /* 変数bに値2を代入 */

      printf( "a + b = %d\n", a + b );  /* 結果 : a + b = 5 */
      printf( "a * b = %d\n", a * b );  /* 結果 : a * b = 6 */

      return 0;
    }

 異なるデータ型の変数を同時に宣言することもできる。以下はログイン数のカウントを模した表示をする例だ。

    #include 

    int main( void )  {

      char user[ 9 ] = "masanori";     /* ユーザー名 */
      int  a         = 5;

      printf( "ユーザー %s は %d 回目のログインです\n", user, a );
      /* 結果 : ユーザー masanori は 5 回目のログインです */
      /*** [注意] 全角文字の出力は処理系依存 ***/

      return 0;

    }
  • コメント(2件)
#1 chaos   2008-03-29 23:35:04
代入と初期化は、ちがうものだとおもうのですが...
#2 Jitta   2008-03-30 22:24:38
「ここでchar a[14]は、char型の半角13文字分のデータ(文字列)を保持するための変数の名前をaとする、という意味だ。」
違います。
まず、安易に“半角”という言葉を使わないでください。Javaをメインでされている人なら、UNIXやLinuxの環境もさわっていらっしゃると思います。EUC_JPの環境で、いわゆる“半角カタカナ”は、何バイトですか?EUC_JP環境でこのコードを実行したときに、半角カタカナが13文字入りますか?
また、charは文字であって、文字列ではありません。「char a[14];」は、1バイト文字14個分の配列です。
Windows、VC++が前提だとおっしゃるのなら、WCHARでもいいはずです。

細かいことを言うと、NULLも1文字と数え、14文字(バイト)分の領域があります。
また、取り扱いには注意が必要ですが、strn*で文字数を指定して格納する場合に、終端子を含まずに14バイトいっぱい使うこともできます。
「char a[14];」とした場合、この中に何が入っているかは予測できません。ここに strncpy などで13バイト分のデータをコピーした場合、a[13]にNULLが入っていなければ、どうなりますか?
たまたま問題なく動くコードがかけているだけです。
  • 新着記事
  • 特集
  • ブログ
このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]