【C言語】sizeof()内の関数は実行されない?動作の仕組みを解説
C言語のsizeof演算子(関数と呼ばれることもあります)は、引数として与えられたデータや型のサイズをバイト単位で計算するために使われます。ここで重要なポイントは、引数に関数が指定された場合でも、その関数自体は実行されないという点です。sizeofはあくまで戻り値の型のサイズだけを評価します。
以下のサンプルコードでは、sizeof()の中にprintf()文を記述してみます。実際に出力される結果を確認しましょう。
サンプルコード
#include<stdio.h>
double my_function() {
printf("This is a test function");
return 123456789;
}
main() {
int x;
x = sizeof(printf("Hello World"));
printf("The size: %d\n", x);
x = sizeof(my_function());
printf("The size: %d", x);
}
実行結果
The size: 4 The size: 8
結果の解説
この出力結果から、以下のことがわかります。
- sizeof()の中に記述されたprintf("Hello World")は実際には実行されておらず、「Hello World」という文字列は画面に表示されていません。
- x = sizeof(printf("Hello World")) の場合、printf()の戻り値の型はintであるため、そのサイズ「4」が返されています。
- x = sizeof(my_function()) の場合、my_function()も実行されず、戻り値の型doubleのサイズ「8」が返されています。
つまり、sizeofは引数として渡された式をコンパイル時に静的に評価し、戻り値の型のみを考慮してそのサイズを算出します。関数呼び出しによる副作用(画面への出力など)は一切発生しないため、sizeof()内に処理を書いても期待通りに動作しない点に注意が必要です。
-
C言語でピラミッド型パターンを表示するプログラム
プログラムの概要 ピラミッドとは、多角形の底面と、頂点(アペックス)と呼ばれる1点を結ぶことで形成される多面体です。底面の各辺と頂点を結んだ三角形は「側面」と呼ばれます。ピラミッドは、多角形を底面とする錐体の一種であり、底面が n 辺形であるピラミッドは、頂点が n+1 個、面が n+1 枚、辺が 2n 本あるという特徴を持ちます。また、すべてのピラミッドは自己双対であることも知られています。 アルゴリズム ユーザーからピラミッドの段数(行数)を入力してもらう 指定された行数に達するまでループを繰り返す: 1行目には星(*)を1つ表示する 行数に応じて星の数を増やしていく サンプルコード
-
【C言語】数字パターンを出力するプログラムの作り方
プログラムの概要 数値パターンとは、「パターンルール」と呼ばれる規則に基づいて生成された数列のことです。パターンルールでは、1つまたは複数の数学的操作を用いて、数列内の連続する数値同士の関係を表現します。 C言語では、for文による繰り返し処理を組み合わせることで、このような規則性のある数字パターンを簡単に出力できます。本記事では、代表的な2種類のパターン(三角形型とひし形型)を出力するプログラムを紹介します。 パターンの例 パターン1(三角形型) 1 2 6 3 7 10 4 8 11 13 5 9 12 14 15 パターン1では、各行の先頭の数字が行番号と一致し、隣の要素は直前の値に「