6
8

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言語のchar、int、文字列の関係

Last updated at Posted at 2020-02-27

はじめに

C言語には文字列を記憶する変数がない。

文字変数はある。

それが__char__。
「キャラ」とか「チャー」とか読む。

charも結局は数字

charは文字を文字コードに変換し、数字として扱う。また、数字を文字に変換し、文字として扱う。
その行き来をさせるための約束事を含んだint型の進化系です。

文字コードとは、文字に1対1で対応する番号をつけて表現する方法のことです。
char型変数に文字を代入するとコンパイルするときに文字コードに対応した数字に置き換えられます。
人間からみて文字で入力されているだけで、機械からすれば数字です。

要するに char型は普通の整数型と全く同じ!!!
ただ、入出力のときに文字に置き換えているだけです。

int main(void)
{
    // int型の配列を宣言
    int arr[] = {65, 66, 67, 68, 69};

    // %dと%cで出力すると?
    for(int i =0; i < 5; i++){
        printf("%d : %c\n", arr[i], arr[i]);
    }
    return 0;
}

結果

65 : A
66 : B
67 : C
68 : D
69 : E

文字が数字に、数字が文字に置き換えられましたね。
これがcharの本質です。

文字列は文字変数の配列

C言語では、文字列の最後に特別な値を記憶しておくことで文字列を扱います。
この様な文字を特に__EOS__(End of String)と呼ぶことがあります。
C言語の場合、'\0'がEOSとして扱われます。'\0'は、数値としては0にあたります。

文字列を出力する%sはループ処理

文字列を出力する%sは、先頭のポインタを受け取り、EOSまでを表示するループ処理です。

int main(void)
{
    char arr1[] = "aiueo";
    char arr2[] = "ai\0ueo";

    printf("%s\n", arr1);
    printf("%s\n", arr2);
    return 0;
}

結果

aiueo
ai

'\0'の手前で止まっていますね。
\はエスケープという仕組みで、機械に対する命令なのか、文字としての数字なのかを判断するようになっています。

charとintの本質的な違い:データサイズ

※コメントより指摘いただきました。未定義だそうです。詳しくはコメントを御覧ください

宣言時に確保されるデータサイズが異なります。char型は数値ではありますが、保持できる領域は-128~128まで。それ以上の数値は扱えません。

char

サイズ:1バイト
表現できる値:-128 〜 128

で、この中の一部の値が文字に対応しており、
「文字として表示する」ことで、アルファベット等の文字が表示されます。

int

サイズ:4バイト
表現できる値:-2147483648 〜 2147483647

まとめ

  • char型はint型と数値を扱っているという意味で同じ。人間が見て表示するときに置き換えているだけ。
  • 違いとしては、確保されるデータサイズが違う。
  • 文字列はcharの配列にEOSを足したもの。

参考

文字の扱い方 - 苦しんで覚えるC言語
https://9cguide.appspot.com/14-01.html

6
8
3

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
6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?