0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

2章 C言語 変数と型

Last updated at Posted at 2018-11-13

2.0 あいさつ

こんにちは!
この記事では、変数と型についてか~な~り端的に書いていきます。
間違いに気付いたらお教えください。

2.1 変数宣言

前章の最後の方で、main関数についてふれましたがそこにでてきたの内、変数宣言の文がありましたよね?

test.c
# include <stdio.h>
int main(void)
{
    // 変数宣言の文
    int nogizaka;
    // 計算・そして代入の文
    nogizaka = 46;
    // 命令実行の文
    printf("乃木坂%d",nogizaka);
    return 0;
}
実行結果
 乃木坂46

この変数を宣言することによって、ものをいれるためのを作ります。変数を宣言するときは、
   型 変数名;
のように必ずスペースをあけてください。
この箱に値をいれることを代入、取り出すことを取得と言います。

1. 変数宣言時の注意事項
名前を付けるときに注意事項があります。

  • 予約語は使えない
int , void , return など
* 先頭に_を1つ付けた名前は使用できない
C言語自体のために予約されている(予約語) 詳しく↓ >予約語について キーワードについて→[BohYoh.com](http://www.bohyoh.com/CandCPP/C/keyword.html) 予約識別子について→[JUGEM](http://portable-c.jugem.jp/?eid=10)          →[JIS X 3010:2003](http://kikakurui.com/x3/X3010-2003-01.html)
  • すでに利用している変数名は付けない
例えば~~いくら乃木坂が好きでも~~nogizakaという名を複数回使うことはできません
* 大文字/小文字、全角/半角は区別される
nogizaka と Nogizaka は、まったくの別物
* 小文字で始まるわかりやすい名前が望ましい
C言語自体のために予約されている(予約語)

2. 代表的な型

型名    格納するデータ 利用頻度
char とても小さな整数 普通
short 小さな整数 普通
int 普通の整数 くっそ使う めちゃくちゃ使う
long 大きな整数 普通
float 少しあいまいでもよい小数 普通
double 普通の小数 普通
bool true か false めちゃくちゃ使う
char 半角の文字 くっそ使う めちゃくちゃ使う
※1. charは、整数と文字のどちらでも使えますが、基本的には文字列として使いましょう。
※2. unsigned型(マイナスを考えない)というのもありますが、まあスルーでもいいでしょう。

3. オーバーフロー
 格納可能な上限値を超える値を変数に代入しようとすることをオーバーフローと言います。普通ほかの言語だとエラーで怒ってもらえるんですけど、C言語だと想定外のことをしてぶっ壊れます。気をつけてください。

2.2 初期化と定数

test.c
# include <stdio.h>
int main(void)
{
    int nogizaka;
    printf("乃木坂%d",nogizaka);
    return 0;
}
実行結果
 乃木坂11029

なにがいけなかったのでしょうか。
→→正解は、"int nogizaka;"のあとに"nogizaka"に何も代入していないことです。
このように新しく定義した変数に対して何かを代入しない場合予期せぬことが起こります。それを防ぐためにあらかじめ数値を代入しておく必要があります。これを初期化と言います。

test.c
# include <stdio.h>
int main(void)
{
    int nogizaka;
    nogizaka = 46;
    // もしくは、下記のようにまとめても良い
    // int nogizaka = 46;
    printf("乃木坂%d",nogizaka);
    return 0;
}
実行結果
 乃木坂46

2.3 上書きと定数について

まずは、以下のプログラムを見てください。

test.c
# include <stdio.h>
int main(void)
{
    int nogizaka = 46;
    int singleNum = 21;
    printf("乃木坂%d、%dndシングル ジコチューで行こう!\n",nogizaka,singleNum);
    nogizaka = 22;
    printf("乃木坂%d、%dndシングル 帰り道は遠回りしたくなる",nogizaka,singleNum);
    return 0;
}
実行結果
    乃木坂46、21ndシングル ジコチューで行こう!
    乃木坂22、21ndシングル 帰り道は遠回りしたくなる

まあここまで大げさに書けばわかると思いますが、"nogizaka" に22を代入していますね。このように箱の中身を最初に定義した値から変えたい場合上書きを行います。これにより中身を変更することは可能です。
しかし、想定では"nogizaka" は変えず "singleNum" を変えたかったはずです。このように想定外の部分で変更されたくないときは、定数として扱いましょう。定数を宣言するときは、
   const 型 変数名;
のように宣言します。
そうすれば定数定義した変数について代入を行おうとするとエラーになります。(想定外の変更が起きなくなります)

※ 列挙定数(知っておくと便利かも)
↑でintを複数定義しましたが、いっぺんに定数として作ることができます。

test.c
# include <stdio.h>
int main(void)
{
    enum{ ASUKA, NANASE, IKUTA, TAKAYAMA};
    printf("%d %d %d %d\n", ASUKA, NANASE, IKUTA, TAKAYAMA);

    enum{ MINAMI = 10, MIONA = 15, YODA = 30, AKIMOTO = 50};
    printf("%d %d %d %d", MINAMI, MIONA, YODA, AKIMOTO);
    return 0;
}
実行結果
    0 1 2 3
    10 15 30 50

2.4 文字列について

文字列についてですが、非常に面倒です。
↑でcharどうのこうの言いましたが、とりあえずは以下の1文(おまじない)書いてことを進めましょう。

    typedef char String[1024];

ざっくりですが例を書いておきます。

test.c
# include <stdio.h>

typedef char String[1024];

int main(void)
{
    String idolName = "乃木坂";
    int nogizaka = 46;

    printf("%s%d", idolName ,nogizaka);
    return 0;
}
実行結果
    乃木坂46

注意事項

1. 初期化を除き、=で代入してはいけない
上記で上書きやら代入やらしましたが、Stringに対してはダメです。危険です。

    String nogizaka = "乃木坂";       //OK
    String keyakizaka;
    keyakizaka = "欅坂";              //ダメ、初期化じゃない
    String nogizaka = keyakizaka;    //ダメ、初期化のようだけど変数

2. ↑のおまじないは絶対にそのまま
いくら乃木坂が好きだからって1024→46にするなど数字を変更するのはだめです。

3. %sについて
ソース中の"%s"は文字の置換用です。数字用の"%d"と間違わないようにしてください。

2.5 bool型について

主に条件分岐として使います。のちにでてきますがif文というもので使用するためです。
こちらも面倒なのですが定義が必要です。

    #include <stdbool.h>

まあtrue(真)とfalse(偽)の方が直感的でわかりやすいですよね。定義があるのですが、中身を見てみるとこのようになっていました。

    #define bool _Bool
    #define true 1
    #define false 0

サンプル下記です。if文は少し予習として書いておきます。

test.c
# include <stdio.h>
# include <stdbool.h>

int main(void)
{
    int nogizaka = 46;
    bool nogi_flag = true;
    if( nogi_flag ){
        printf("私達、乃木坂%dです", nogizaka );
    }
    return 0;
}
実行結果
    私達、乃木坂46です。

以上。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?