-
C言語のregister(レジスタ)記憶クラスとは?特徴と使い方を実例付きで解説
C言語には、変数の記憶場所・有効範囲(スコープ)・寿命を制御するための記憶クラス(ストレージクラス)が4種類用意されています。 auto extern static register register(レジスタ)変数とは 宣言に使用するキーワードは register です。 通常の変数はメインメモリ上に格納されますが、register変数はCPU内部のレジスタに格納されます。 レジスタとは、CPU内に備わっている一時的な記憶ユニットのことです。 メモリへのアクセスよりもレジスタへのアクセスの方がはるかに高速なため、register変数は通常の変数よりも速く読み書きできます。 そのため、
-
C言語の関数に関連するスコープ規則をわかりやすく解説
スコープ(有効範囲)とは C言語におけるスコープ(Scope:有効範囲)は、次の3つの要素と密接な関係があります。 変数へのアクセス可能性 ― どの関数から参照・操作できるか 変数の存在期間(寿命) ― 変数がメモリ上に保持される期間 変数の使用範囲(境界) ― コードのどの部分で利用できるか 関数に関連するスコープ規則 関数とは、特定の処理を実行するための自己完結型のブロックです。 関数本体の内部で宣言された変数はローカル変数(局所変数)と呼ばれます。 ローカル変数は、それを宣言した関数の中でのみ存在し、他の関数やmain関数からも参照できません。 ローカル変数の寿命は、関数が処理を
-
C言語で配列全体を関数の引数として渡す方法をわかりやすく解説
配列とは、関連性のある複数のデータを共通の名前でまとめて格納するためのデータ構造です。本記事では、C言語において配列全体を関数の引数として渡す方法を、基本概念からサンプルコードまで順を追って解説します。 配列の宣言 配列を宣言する際の基本的な構文は以下のとおりです。 datatype array_name [size]; たとえば、5個の整数を格納する配列は「int a[5];」のように宣言します。 配列の初期化 配列の初期化には、主に次の2つの方法があります。 コンパイル時初期化: コードを書く時点で値を決めておく方法 実行時初期化: プログラムの実行時にユーザー入力などから値を設定する方
-
C言語入門:ポインタと2次元配列の仕組みをわかりやすく解説
ポインタとは、別の変数のアドレス(メモリ上の場所)を格納するための特殊な変数です。C言語において、ポインタはメモリを直接操作できる強力な機能として、効率的なプログラミングに欠かせない存在となっています。 ポインタの主な特徴 ポインタを使うことで、メモリ領域を節約できます。 メモリ上の位置へ直接アクセスできるため、実行速度が速くなります。 ポインタを利用すると、メモリの動的な割り当てと解放が可能になり、メモリを効率的に管理できます。 リンクリストやツリーなどのデータ構造と組み合わせて使われます。 ポインタと2次元配列の関係 2次元配列は、メモリ上には行ごとに連続した形で配置されます。例えば、
-
【C言語】strncpy()関数とは?基本から実践的な使い方まで解説
strncpy()関数とはC言語の標準ライブラリ関数 char *strncpy(char *dest, const char *src, size_t n) は、srcが指す文字列からdestへ最大n文字をコピーする関数です。もしsrcの長さがnより短い場合は、コピー後のdestの残りの領域がヌルバイト(\0)で埋められます。なお、C言語において文字の配列は「文字列」と呼ばれます。文字列の宣言文字列(文字型配列)の宣言は以下のように行います。char stringname[サイズ];たとえば、char string[50];と記述すれば、最大50文字を格納できる文字列が宣言できます。文字列の
-
C言語のstrrev関数とは?文字列を反転する方法を徹底解説
C言語において、文字型(char)の配列として表現されるデータを「文字列」と呼びます。文字列の宣言文字配列を宣言するための基本構文は以下のとおりです。char stringname [size];たとえば「char string[50];」と記述すると、最大50文字の長さを持つ文字列を格納できる配列が確保されます。文字列の初期化文字列を初期化する方法は、主に次の2通りがあります。1文字ずつ文字定数で初期化する方法char string[10] = { H, e, l, l, o, \0 };文字列リテラル(文字列定数)を使う方法char string[10] = Hello;アクセス:文字列の
-
C言語で文字列へのポインタの配列とそのアドレスを出力する方法
まずは、C言語における「ポインタの配列」とは何かを確認しましょう。 文字列へのポインタの配列とは 各要素が、文字列の先頭アドレスを指すポインタになっている配列のことです。 宣言と初期化は次のように行います。 char *a[ ] = {"one", "two", "three"}; ここで、a[0] は文字列 one の、a[1] は two の、a[2] は three のそれぞれ先頭アドレスを指すポインタです。 イメージとしては、配列の各要素が対応する文字列の先頭番地を保持しており、その番地をたどることで文字列本体へアクセスで
-
【C言語】文字列内で最も出現回数が少ない文字を検索するプログラムの書き方
文字型データを並べた配列は「文字列」と呼ばれます。C言語では、文字列は終端を示すヌル文字 \0 で終わる文字の配列として扱われます。 文字列の宣言 文字配列を宣言する際の基本構文は以下の通りです。 char stringname[size]; 例えば char string[50]; と記述すると、最大50文字の長さを持つ文字列を格納できる配列が確保されます。 文字列の初期化 文字列の初期化には、主に次の2つの方法があります。 1. 文字定数を使う方法 char string[10] = { H, e, l, l, o, \0 }; 2. 文字列リテラル(文字列定数)を使う方法 char st
-
C言語で累乗を計算するプログラムの作成方法【サンプルコード付き】
ユーザーから底(基数)と指数として2つの整数を入力してもらい、その累乗を計算するCプログラムについて解説します。例累乗の計算は、次のように行われます。底(base)= 3指数(exponent)= 4累乗(power)= 3 × 3 × 3 × 3 = 81アルゴリズム以下の手順に従ってプログラムを作成します。ステップ1:int型とlong型の変数を宣言する。ステップ2:コンソールから底の値を入力する。ステップ3:コンソールから指数の値を入力する。ステップ4:whileループで繰り返し処理を行う。 指数が0でない間: i. value *= base(valueにbaseを掛ける)
-
C言語で行列の境界要素の合計を求めて出力するプログラム
行列が与えられたとき、その外周(境界)にある要素だけを出力し、それらの合計を求めて表示するのが本記事の目的です。ここでは、その考え方と具体的なC言語の実装例をわかりやすく解説します。 例 まず、次の3×3の行列を例に考えてみましょう。 入力された行列 1 2 3 4 5 6 7 8 9 境界行列(外周のみ表示) 1 2 3 4 6 7 8 9 このとき、境界要素は「1, 2, 3, 4, 6, 7, 8, 9」であり、中央の「5」は内部要素のため除外されます。 境界要素の合計:1 + 2 + 3 + 4 + 6 + 7 + 8 + 9 = 40 境界要素の合
-
C言語の関数の戻り値(return)とは?意味と使い方をわかりやすく解説
関数とは、特定のタスクを実行するために設計された、自己完結型のコードブロックのことです。プログラムを機能単位に分割することで、コードの見通しが良くなり、保守性も向上します。C言語における関数のメリット同じ処理を何度でも再利用できる(再利用性)プログラム全体の長さを短縮できる不具合のある関数を特定・分離しやすいトップダウン式のモジュールプログラミングを実現しやすい関数の基本例以下は、C言語で関数を定義して呼び出す基本的なプログラムです。#include<stdio.h>/* 関数プロトタイプ宣言 */myfunc();main(){ my
-
C言語で10進数を2進数に変換する方法【関数を使った実装例】
はじめにC言語では、関数を使うことで10進数を2進数に変換する処理を簡潔に実装できます。本記事では、main()関数から変換用の関数を呼び出し、実際の変換処理をその関数内で行う方法を解説します。変換のロジック10進数を2進数に変換する基本的な考え方は、「2で割った余り」を下位の桁から順に並べていくことです。今回使用するロジックは以下のとおりです。while(dno != 0){ rem = dno % 2; bno = bno + rem * f; f = f * 10; dno = dno / 2; }このループでは、次の手順で処理が進みます。dno % 2
-
C言語の型修飾子とは?const(定数)型修飾子の基本と使い方を解説
型修飾子とは 型修飾子(Type Qualifier)は、C言語において既存のデータ型に特別な属性を付加するためのキーワードです。これにより、変数の扱われ方やアクセス方法についてコンパイラへ指示を出すことができます。 C言語には主に3種類の型修飾子が存在します。本記事では、その中でも特に重要な「const(定数)型修飾子」について詳しく解説します。 const型修飾子の基本 「const」は、一度設定した値をプログラムの実行中に変更できないことを保証する修飾子です。C言語における定数には、以下の3種類があります。 リテラル定数 定義済み定数(#define) メモリ定数(const) 1
-
C言語のプリプロセッサコマンドとは?3つの種類と使い方をわかりやすく解説
プリプロセッサとはプリプロセッサとは、ソースコードがコンパイラに渡される前に処理を行うプログラムのことです。プリプロセッサは、「#」記号で始まるプリプロセッサ指令(ディレクティブ)に従って動作し、コードの前処理を担当します。プリプロセッサコマンドの3つの種類C言語のプリプロセッサコマンドは、主に以下の3種類に分類されます。マクロ置換指令(Macro Substitution Directives)ファイル取り込み指令(File Inclusion Directives)コンパイラ制御指令(Compiler Control Directives)マクロ置換指令マクロ置換指令は、識別子(ident
-
C言語のインライン関数とは?仕組みと基本構文をわかりやすく解説
インライン関数(inline function)とは、関数を呼び出している箇所に関数本体のコードを直接展開できるようにした関数のことです。これにより、関数呼び出しにかかるオーバーヘッドを削減できます。なお、実際にコードを展開するかどうかは、常にコンパイラが判断します。インライン関数では、関数呼び出しが実際のプログラムコードに置き換えられます。インライン関数は主に小規模な計算に使用されます。大規模な処理には適していません。インライン関数は通常の関数とほぼ同じですが、関数名の前に「inline」キーワードを付ける点だけが異なります。インライン関数の基本構文インライン関数は、以下の構文で定義します。
-
C言語入門:ダブルポインタ(ポインタへのポインタ)とvoidポインタの基本をわかりやすく解説
C言語には、通常のポインタ以外にも「ポインタへのポインタ(ダブルポインタ)」や「voidポインタ」といった便利な概念があります。この記事では、それぞれの宣言方法・初期化・値へのアクセス方法を、実際に動作するサンプルコードとともにわかりやすく解説します。 ダブルポインタ(ポインタへのポインタ)とは ダブルポインタとは、別のポインタ変数のアドレスを格納する変数のことです。通常のポインタが「変数のアドレス」を保持するのに対し、ダブルポインタは「ポインタのアドレス」を保持するという点が特徴です。 宣言方法 ポインタへのポインタは、アスタリスク(*)を2つ重ねて次のように宣言します。 datatype
-
C言語の「定数へのポインタ」とは?意味・宣言方法・動作をサンプルコードで解説
定数へのポインタとは何か C言語における「定数へのポインタ(pointer to constant)」とは、ポインタが指し示す先の値を読み取り専用にするための宣言方法です。この場合、ポインタ変数そのものに別のアドレスを代入することはできますが、ポインタを通して指し示す先の値を書き換えることはできません。 宣言の基本構文は以下のとおりです。 Data_Type const* Pointer_Name; たとえば、次のように記述します。 int const *p; // 定数整数へのポインタ 例1:const を付けた場合(値の変更はエラーになる) 以下は、定数へのポインタの動作を確認するC
-
【C言語】16進数を整数値に変換する方法と仕組みをわかりやすく解説
問題C言語を使って、16進数の値を整数値に変換するにはどうすればよいのでしょうか?この記事では、変換の基本的な考え方と、実際に動作するサンプルプログラムを交えて解説します。解決方法の基本概念16進数は、0〜9の数字とA〜Fのアルファベット、合計16種類の記号で数値を表現します。A〜Fはそれぞれ、10進数の10〜15に対応しています。16進数を10進数に変換するには、各桁の値に16のべき乗を掛けて足し合わせます。例えば、16進数の「A12」は次のように計算できます。A × 16² = 10 × 256 = 25601 × 16¹ = 1 × 16 = 162 × 16⁰ = 2 × 1 = 2こ
-
C言語のコマンドライン引数とは?argcとargvの使い方をわかりやすく解説
OSに対して特定のタスクを実行させる実行可能な命令のことを「コマンド」と呼びます。コマンドは、OSのコマンドプロンプトから入力することで発行されます。 コマンドライン引数を構成する2つの要素 コマンドに関連付けられる引数には、主に以下の2つがあります。 argc(argument count)─ 引数の個数 argv(argument vector)─ 引数ベクトル argc とは argc は、コマンドプロンプトから渡された引数の総数を保持する変数です。プログラム名自身も1つとしてカウントされる点に注意してください。 argv とは argv は、各引数の名前が格納された文字列配列へのポ
-
C言語のバックスラッシュ文字定数とは?主なエスケープシーケンス一覧とサンプルコード
C言語では、キーボードから直接入力したり画面に表示したりすることが難しい「非グラフィック文字」を扱うために、バックスラッシュ(\)を使った特別な記法が用意されています。これをエスケープシーケンスと呼びます。その中でも最も頻繁に使われるのが、出力を次の行へ移す改行文字(\n)です。主なバックスラッシュ文字の一覧C言語で利用できる主なバックスラッシュ文字(エスケープ文字)は次のとおりです。文字意味\a警告音(ベル)\bバックスペース\fフォームフィード(ページ送り)\n改行(ニューライン)\t水平タブ\r復帰(キャリッジリターン)\v垂直タブ\\バックスラッシュそのもの\シングルクォーテーション(