0
1

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.

C言語の学習3 (初心者)

0
Posted at

この記事について

この記事はC言語初学者がアウトプットの為に書いたものなので、大半の方には参考にならないと思います。暇な時でもよろしいので記事に誤りがある場合はご指摘いただけると助かります。

三項演算子

「if (条件) {} else {} 」というシンプルな条件分を1行で表現するものです。以下のように書きます。

sample.c

# include <stdio.h>

/*プロトタイプ宣言*/
float getMax(float a, float b);

int main(void){
    float result;
    result = getMax(2.3, 5.2);
    printf("%f\n", result);

    return 0;
}

/*関数の定義*/
float getMax(float a, float b) {
/*(条件式) ? 条件が真の時の返り値 : 条件が偽の時の返り値*/
    return (a >= b) ? a : b;
/*下の条件文と同一の内容*/
    // if (a >= b) {
    //     return a;
    // } else {
    //     return b;
    // }
}

変数の有効範囲(スコープ)について

変数を使用する時はスコープに注意する必要があります。スコープとはその変数が使える範囲のことで、ある関数内で定義した変数は、その関数内でしか使用できません。

sample.c

# include <stdio.h>

/*プロトタイプ宣言*/
void f(void);

int main(void){
    f();
    /*変数aは関数fの中で定義したものなので、ここでは使用できない*/
    printf("a:%d\n", a);
    return 0;
}

/*関数の定義*/
void f(void) {
    int a = 0; /*有効範囲が限定的な変数を"ローカル変数"という*/
    a++;
    printf("a:%d\n", a);
}

変数を関数の外で定義すれば問題なく動きます。

sample.c

# include <stdio.h>

/*プロトタイプ宣言*/
void f(void);

int a = 0; /*グローバル変数という*/

int main(void){
    f();
    /*aは全関数で使用できる共通の変数(グローバル変数)なので、問題なく使用できる*/
    printf("a:%d\n", a);
    return 0;
}

/*関数の定義*/
void f(void) {
    a++;
    printf("a:%d\n", a);
}

変数の有効期限

ローカル変数は自動変数とも呼ばれており、関数(ブロック)内でしか値を保持しないので関数が呼び出される度にリセットされます。

sample.c

# include <stdio.h>

/*プロトタイプ宣言*/
void f(void);

int main(void){
    f();
    f();
    f();
    return 0;
}

/*関数の定義*/
void f(void) {
    int a = 0; /*自動変数とも呼ばれる*/
    a++;
    printf("a:%d\n", a);
}

/*ターミナルの結果*/
a:1
a:1
a:1
/*呼び出される度にリセットされるので全て1になる*/

プログラムが終了するまで値を保持していて欲しい場合、自動変数を静的変数に変えてあげれば問題ありません。

sample.c

# include <stdio.h>

/*プロトタイプ宣言*/
void f(void);

int main(void){
    f();
    f();
    f();
    return 0;
}

/*関数の定義*/
void f(void) {
    static int a = 0; /*変数の型の前にstaticと付けると静的変数になる*/
    a++;
    printf("a:%d\n", a);
}

/*ターミナルの結果*/
a:1
a:2
a:3
/*値が保持されているので関数を呼び出す度に値が高くなる*/

静的変数を使用する時に注意する点があります。staticと宣言された変数は、2回目以降は無視されます。以下のように書いてしまうと変数が毎回リセットされます。

sample.c

void f(void) {
    static int; /*ここだけが2回目以降無視される*/
    a = 0; /*引き続き毎回リセットされる*/
    a++;
    printf("a:%d\n", a);
}

配列

配列とは同一の型のデータがい1列に並べられたデータの集合体で、配列中の各データは要素と呼ばれ、要素には番号が割り振られています。配列の定義方法は以下のようにやります。

sample.c

# include <stdio.h>


int main(void){

    int sales[3];

    sales[0] = 200;
    sales[1] = 400;
    sales[2] = 300;
    /*このような書き方も可能 ([]の要素数も省略可能)*/
    int sales2[] = {200, 400, 300}

    /*400と表示される*/
    printf("%d\n", sales[1]);
    return 0;
}

文字列

C言語では文字列は「文字の配列」という扱いなので、以下のように書きます。

sample.c

# include <stdio.h>


int main(void){
    /*文字列はchar型の配列 終端には\0と明記する*/
    char s[] = {'a', 'b', 'c', '\0'};
    /*以下のような書き方でもOK*/
    char s1[] = "abc";
    /*終端も含めるので要素数は4*/
    char s2[4] = "abc";

    /*文字列内の1文字を表示*/
    printf("%c\n", s[1]);
    return 0;
}

感想

これまでのC言語の学習は、ある程他の言語との共通点があるのでスムーズに進んだが、今回からプロトタイプ宣言や静的変数といった新しい概念が出てきたので注意して学習を進めていきたい。

0
1
0

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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?