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?

C言語の式(Expression)について

Last updated at Posted at 2025-10-07

挨拶

今回も新・標準プログラマーズライブラリ C言語 ポインタ完全制覇 を教本に学習を進めて行きます。今回は 式(Expression) について学習していきます。教本に沿って学習を進めますが、事実と異なる部分があればご指摘いただけるとありがたいです。

式とデータ型

一次式

教本によるとこれは以下のものを指すとあります。

  • 識別子(変数・関数名)
  • 定数
  • 文字列リテラル
  • 式を()で囲んだもの

読み進めて行くと、どうやら"式の要素に使えるもの"を表しているようです。
どういう意味かというと、

int hoge = 10;
int x = 5;
printf("hoge + x = %i\n",(hoge + x) / 5);

結果

hoge + x = 3

このようなコードの場合hogexはリストで言うところの識別子に該当し、printf関数内にて()で囲み、5で割っている部分が式を()で囲んだものに該当します。

//識別子
int hoge = 10;
int x = 5;
//式を()で囲んだもの
printf("hoge + x = %i\n",(hoge + x) / 5);

これを指して一次式と呼んでいるようです。

なぜこれが重要なのか?

これが重要なのは、あらゆる式には型があるということです。
これは関数を例に上げるとわかりやすそうです。
例えば以下のような関数を定義したとします。

int sum(int x,int y){
return x + y;
}

この関数を呼び出して使う際の引数はint型でなければなりません。

sum(10,5);

結果

x + y = 15

また、printf関数を使用する際、第一引数に文字リテラル(ダブルクオーテーションで囲まれた部分)を渡しているのもこれが理由です。

	printf("hoge + x = %i\n",(hoge + x) / 5);

printf関数はstdio.hにおいて、第一引数の型はcharへのポインタと定められています。

printf (const char *__restrict __fmt, ...)

そのため、第一引数にint型の変数や計算結果を渡すとコンパイルエラーになってしまいます。
(第一引数が文字列リテラルのため、以下のコードは問題なく使用できます)
(コメントにて、"以下のコードはchar型の配列(char[8])なのでポインタ型とは異なる"とご指摘いただきました。まだ勉強不足で適切な例を出せず申し訳無いです...)

printf("Hello!\n");

少し話がそれてしまいましたが、要は変数や関数の引数には必ず型があるのだから、それに合わせないとエラーになるということです。(当たり前)
最初に書いた1次式は、このことを説明するためのものだと思います。
このあたりは他の言語でも同じかと思います。(型推論に関してはどう処理しているのかわかっていません...)

参照

0
0
4

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?