以下は、提供された英文テキストを日本語に翻訳したものです。原文の意味、トーン、細かい違いを保つように翻訳しました。

C - Data Types

C - データ型

こんにちは、将来のプログラマーさんたち!エキサイティングなC言語の世界への旅にようこそ。今日は、C言語のデータ型の魅力的な領域を探ってみます。プログラミングが初めての方も安心してください。私はあなたのフレンドリーなガイドとして、このトピックをステップバイステップで取り上げます。お気に入りの飲み物を用意して、リラックスして、一緒に飛び込みましょう!

整数データ型

まず、私たちがよく知っているものから始めましょう。那就是、整数です。整数は、異なるサイズと種類があります。

基本的な整数型

以下は、C言語で最も一般的な整数型の表です:

データ型 サイズ(バイト) 範囲
char 1 -128から127、または0から255
short 2 -32,768から32,767
int 4 -2,147,483,648から2,147,483,647
long 4または8 -2,147,483,648から2,147,483,647、または-9,223,372,036,854,775,808から9,223,372,036,854,775,807

これらを実行してみましょう:

#include <stdio.h>

int main() {
    char my_char = 65;
    short my_short = 32000;
    int my_int = 2000000000;
    long my_long = 9000000000L;

    printf("char: %c\n", my_char);
    printf("short: %d\n", my_short);
    printf("int: %d\n", my_int);
    printf("long: %ld\n", my_long);

    return 0;
}

このコードを実行すると以下のようになります:

char: A
short: 32000
int: 2000000000
long: 9000000000

以下のように説明します:

  • charの値65は、ASCII表中の'A'に対応しています。驚き!charは数値も格納できます!
  • shortintは、中程度のサイズの数値として期待通りに動作します。
  • longの場合は、末尾に'L'を追加して、Cにそれが長い数値であることを伝えます。

無符号整数

時々、正の数だけ必要な場合があります。その場合、無符号整数が役立ちます:

unsigned char my_uchar = 255;
unsigned short my_ushort = 65000;
unsigned int my_uint = 4000000000U;

printf("unsigned char: %u\n", my_uchar);
printf("unsigned short: %u\n", my_ushort);
printf("unsigned int: %u\n", my_uint);

出力:

unsigned char: 255
unsigned short: 65000
unsigned int: 4000000000

unsignedを使用することで、同じメモリ量でより大きな正の数を格納できます。魔法のようですが、这只是ビットの賢い使い方です!

浮動小数点データ型

次に、小数の世界に飛び込みましょう。C言語は以下の3つの浮動小数点型を提供しています:

データ型 サイズ(バイト) 精度
float 4 6-7桁の小数
double 8 15-16桁の小数
long double 16 19-20桁の小数

これらを実行してみましょう:

#include <stdio.h>

int main() {
    float pi_float = 3.14159265358979323846f;
    double pi_double = 3.14159265358979323846;
    long double pi_long_double = 3.14159265358979323846L;

    printf("float: %.7f\n", pi_float);
    printf("double: %.16f\n", pi_double);
    printf("long double: %.20Lf\n", pi_long_double);

    return 0;
}

出力:

float: 3.1415927
double: 3.1415926535897931
long double: 3.14159265358979323846

floatは7桁目以降で精度を失いますが、doublelong doubleはより多くの精度を保持します。デジタル写真にズームインするのと似ています。ある時点でピクセルが見えるようになります!

ユーザー定義データ型

C言語では、自分でデータ型を作成できます。これは、自分でレシピを作るシェフのようなものです!

構造体

構造体を使用すると、関連するデータを一组にまとめることができます:

#include <stdio.h>
#include <string.h>

struct Student {
    char name[50];
    int age;
    float gpa;
};

int main() {
    struct Student alice;
    strcpy(alice.name, "Alice");
    alice.age = 20;
    alice.gpa = 3.8;

    printf("Name: %s\n", alice.name);
    printf("Age: %d\n", alice.age);
    printf("GPA: %.1f\n", alice.gpa);

    return 0;
}

出力:

Name: Alice
Age: 20
GPA: 3.8

ここで、Student型を作成し、名前、年齢、GPAを一組にまとめました。これは、学生情報のフォームを作成するようなものです!

列挙型

列挙型は、名前付き定数のセットを作成するのに非常に便利です:

#include <stdio.h>

enum Days {SUN, MON, TUE, WED, THU, FRI, SAT};

int main() {
    enum Days today = WED;
    printf("Today is day number %d\n", today);
    return 0;
}

出力:

Today is day number 3

列挙型は、自動的に0から始まり、増加する整数値を割り当てます。これは、数字にニックネームを付けるようなものです!

voidデータ型

voidはC言語の特別なデータ型です。これは、空白のキャンバスのようなもので、データの不在を表します。主に以下の3つのシナリオで使用されます:

  1. 処理が何も返さない場合:

    void sayHello() {
     printf("Hello, World!\n");
    }
  2. 処理がパラメータを受け取らない場合:

    int getRandomNumber(void) {
     return 4;  // フェアなサイコロの結果。確実にランダムです。
    }
  3. ジェネリックポインタ(ポインタのセクションで説明します)

配列データ型

配列は、同じ型の値を格納するポストの列のようなものです:

#include <stdio.h>

int main() {
    int scores[5] = {85, 92, 78, 90, 88};

    printf("First score: %d\n", scores[0]);
    printf("Last score: %d\n", scores[4]);

    float average = 0;
    for(int i = 0; i < 5; i++) {
        average += scores[i];
    }
    average /= 5;

    printf("Average score: %.2f\n", average);

    return 0;
}

出力:

First score: 85
Last score: 88
Average score: 86.60

C言語では、配列のインデックスは0から始まります。これは、ヨーロッパのフロアのように、地下フロアが0です!

ポインタデータ型

ポインタは、メモリ内の位置を指す看板のようなものです。これは強力ですが、扱いに注意が必要です:

#include <stdio.h>

int main() {
    int x = 10;
    int *p = &x;

    printf("Value of x: %d\n", x);
    printf("Address of x: %p\n", (void*)&x);
    printf("Value of p: %p\n", (void*)p);
    printf("Value pointed by p: %d\n", *p);

    *p = 20;
    printf("New value of x: %d\n", x);

    return 0;
}

出力(アドレスは変わります):

Value of x: 10
Address of x: 0x7ffd5e8e3964
Value of p: 0x7ffd5e8e3964
Value pointed by p: 10
New value of x: 20

ここで、pxのアドレスを格納するポインタです。*pを使用して、そのアドレスの値にアクセスまたは変更できます。これは、xのリモコンを持っているようなものです!

以上で、C言語の主要なデータ型をカバーしました。データ型を理解することは、メモリを効率的に管理し、バグを回避するのに非常に重要です。続けて練習し、すぐにこれらの型をプロのように扱えるようになるでしょう!ハッピーコーディング!

Credits: Image by storyset