C言語 入門 変換指定子分かりやすく解説します!(%p,%x,…)

C Language

変換指定子の種類が多すぎるからまとめて欲しい。

%p、%xって何?

この記事を読めば、これらの悩みを解決できます。

変換指定子って何?

変換指定子とは、「変数に代入されている文字や数字を使用する際に、どのように変換するか?」を指定するためのものです。たとえば、「scanf」や「printf」を使う際に必要になります。

「%c」、「%d」などが有名で、知っている人も多いと思いますが、ここでは全種類解説していきます。

先にデータ型の解説を読んでおくと分かりやすいかもです。(バイト長も解説しています)

変換書式は「入力書式」と「出力書式」の2つのグループに分けることができます。「入力書式」は入力するときに使い、「出力書式」は出力するときに使います。

出力書式の一覧(printfとかで使う)

変換指定子対応する型意味
%cchar1文字だけ出力
%schar(配列)文字列を出力
%dint, short整数を10進数で出力
%ldlong倍精度整数を10進数で出力
%uunsigned int, unsigned short 符号なし整数を10進数で出力
%luunsigned long符号なし倍精度整数を10進数で出力
%oint, short, unsigned int, unsigned short 整数を8進数で出力
%lolong, unsigned long倍精度整数を8進数で出力
%xint, short, unsigned int, unsigned short整数を16進数で出力
%lxlong, unsigned long倍精度整数を16進数で出力
%ffloat実数を出力
%lfdouble倍精度実数を出力
%efloat実数を指数表示で出力
%gfloat実数を最適な形式で出力
%pアドレスを16進数で出力

「倍精度」は倍のバイト長であることを意味します。上から順に解説していきます。

文字の出力

「%c」、「%s」は文字の出力をするための変換指定子です。「%s」は配列に対応しているため、文字列の出力が可能です。

整数を10進数で出力

「%d」、「%ld」、「%u」、「%lu」は整数を10進数で出力するための変換指定子で、「%u」「%lu」は符号を付けない場合に使います。また、「%ld」「%lu」は倍精度整数の場合に使います。

整数を8進数で出力

「%o」、「%lo」は整数を8進数で出力するための変換指定子で、「%lo」は倍精度整数を出力するときに使います。

整数を16進数で出力

「%x」、「%lx」は整数を16進数で出力するための変換指定子で、「%lx」は倍精度整数を出力するときに使います。

実数を出力

「%f」、「%lf」、「%e」、「%g」は実数を出力するための変換指定子で、「%lf」は倍精度実数を出力するとき、「%e」は指数表示で出力するとき、「%g」は最適な形式で出力するときに使います。

アドレスを16進数で出力

「%p」は16進数でアドレスを出力するための変換指定子です。

もっと詳しく勉強したい方は、こちらを参考にしてください。

このように、いくつかに分けると覚えやすいです。次は、入力書式を一覧にしてみます。

入力書式の一覧(scanfとかで使う)

変換指定子対応する型意味
%cchar1文字だけ入力
%schar(配列)文字列を入力
%dint整数を10進数として入力
%ldlong倍精度整数を10進数として入力
%hdshort単精度整数を10進数として入力
%uunsigned int符号なし整数を10進数として入力
%luunsigned long符号なし倍精度整数を10進数として入力
%huunsigned short符号なし単精度整数を10進数として入力
%oint, short, unsigned int整数を8進数として入力
%lolong, unsigned long倍精度整数を8進数として入力
%xint, unsigned int整数を16進数として入力
%lxlong, unsigned long倍精度整数を16進数として入力
%ffloat実数を入力
%lfdouble倍精度実数を入力

文字の入力

「%c」、「%s」は文字の入力をするための変換指定子です。「%s」は配列に対応しているため、文字列の入力が可能です。

整数を10進数で入力

「%d」、「%ld」、「%hd」、「%u」、「%lu」、「%hu」は整数を10進数で入力するための変換指定子で、「%u」「%lu」「%hu」は符号を付けない場合に使います。また、「%ld」「%lu」は倍精度整数の場合に使い、「%hd」、「%hu」は単精度整数の場合に使います。

整数を8進数で入力

「%o」、「%lo」は整数を8進数で入力するための変換指定子で、「%lo」は倍精度整数を入力するときに使います。

整数を16進数で入力

「%x」、「%lx」は整数を16進数で入力するための変換指定子で、「%lx」は倍精度整数を入力するときに使います。

実数を入力

「%f」、「%lf」は実数を入力するための変換指定子で、「%lf」は倍精度実数を入力するときに使います。

17種類の変換指定子を覚えるには?裏技を紹介

数えてみると、今回紹介した変換指定子は全部で16種類あります。まともに1つひとつ覚えるのは効率がとても悪いので、変換指定子を簡単に全種類覚える裏技を紹介します。

①それぞれの関連性を考えてまとめてみる

②関連性のあるものをまとめて覚える

③実際にプログラミングしてみる

ほとんどの人は①、②を飛ばして無理に覚えようとしてしまいます。①➔②➔③の順番に実行しましょう。①はこのサイトを見ている人はやらなくてOKです。画面をスクショしたり、ブックマークして何度も繰り返し確認しましょう。

その後は、実際にプログラミングをして「アウトプット」する作業が必要です。ネットに載っているものではなく、自分でプログラムを考えるとより効果があります。

本当に全種類覚える必要ある?

ここまで読んでいる方は、本当に全種類覚える必要があるのか疑問になってきますよね。実際、8進数で表示、16進数で表示することなんてほとんどないです。必要になりそうなものだけ覚えて、残りは覚えずに他の学習に使った方が効率的です。無理に何時間もかけて覚えるのは得策ではないですね。

まとめ

何度も言うように、変換指定子を全種類覚える必要はありません。他の勉強をした方が効率的です。BlogMuuではC言語の勉強ができるので参考にしてみてください。