C言語

キャスト演算子

キャスト演算子は、指定された型にキャスト(型変換)する演算子・・・。式の値や変数が違う型同士の場合、暗黙的なキャストのルールによって、同じ型になるように変換される・・・。ただし、指定した型に強制的に変換したい場合はキャスト演算子を使って変換…

ビット演算子

単一の整数値、または2つの整数値同士は、ビット演算子を使ってビット演算が可能である・・・。まずは、入力されたa, bの値を2進数のビット列で出力する・・・。 2で割った余りを下の桁から文字配列に入れていく感じ・・・。 (今回はintのa, bを8桁2進数で表…

論理演算子

if文などの条件式で条件と条件を繋げたり、条件を否定する条件にしたりする時、論理演算子を使う・・・。論理和(OR)の演算子("||")を使って、 A || B は「AまたはB」というような意味・・・。 どちらかが満たされていればいい・・・。aが10より大きい、また…

const

const修飾子を変数宣言で型の前に付けると、値が変更できない変数(つまり定数)となる・・・。 const <型> <変数名> 例えば、 /* ヘッダファイルのインクルード */ #include <stdio.h> /* 標準入出力 */ /* main関数の定義 */ int main(void){ /* 変数の初期化 */ int </stdio.h>…

exit

exitは、指定した終了コードでプログラムを終了するC標準ライブラリ関数・・・。Man page of EXITmain関数の中のreturn文と基本的には同じ・・・。 ただ、これを使えば、任意の他の関数からプログラムを終了できる・・・。 異常時の強制終了とかに使う・・・…

外部変数

グローバル変数は、そのモジュール内ならどこでも参照、代入が可能な変数であった・・・。 では、別のモジュールからその変数を参照したり、代入したりする場合はどうすればいいのか?このような場合は、参照したい別モジュールで、参照したい変数をexternを…

スタティック変数

スタティック変数は、関数などのブロック内部のみアクセス可能だが、そのブロックを抜けても変数の値を保持する性質を持つ・・・。今回は、関数内部に3つの変数を宣言し、関数が呼ばれるたびにその値がどう変化するかを見ていく・・・。スタティック変数を含…

グローバル変数

基本的に変数は、if文や、for文、関数などブロック("{"と"}")で囲まれた範囲(これをスコープという)でのみ有効であり、 外からそこにアクセスすることはできないし、そのブロックを抜けると値も保持される保証は無い・・・。グローバル変数は、そのモジュー…

ftell

ftellは指定されたファイルの現在のアクセス位置を取得するC標準ライブラリ関数・・・。Man page of FSEEKの2番目がftell・・・。 引数はファイルポインタだけ・・・。 戻り値に、先頭からのアクセス位置がlongの値で返ってくる・・・。fseekの頁ではprof.bi…

fseek

fseekは指定されたファイルのアクセス位置をセットするC標準ライブラリ関数・・・。Man page of FSEEKの1番目がfseek・・・。 ファイルポインタ、基準位置から何バイト目か、基準位置(先頭からなのか、末尾からなのか、など)、って感じで指定する・・・。こ…

fread

freadは指定されたファイルなどのストリームから、指定サイズのデータを読み込み、指定のメモリ領域に格納するC標準ライブラリ関数・・・。Man page of FREADの1番目がfread・・・。 バイナリファイルから、変数、配列、構造体にデータを格納するとき使う・…

fwrite

fwriteは指定されたメモリ領域のデータを指定されたサイズ分、ファイルなどのストリームに出力するC標準ライブラリ関数・・・。Man page of FREADの2番目がfwrite・・・。 一般的には、変数や配列、構造体などをバイナリデータのままファイルに書き込むとき…

fputs

fputsは指定された文字列をファイルなどのストリームに出力するC標準ライブラリ関数・・・。Man page of PUTSの2番目がfputs・・・。 指定文字列を標準出力へ出力するputsをベースにしている・・・。 第1引数に出力する文字列、第2引数にファイルポインタを…

fgets

fgetsはファイルなどの指定されたストリームから1行分の文字列を読み込んで、指定の文字配列に格納するC標準ライブラリ関数・・・。Man page of FGETCの2番目がfgets・・・。 標準入力から1行読み込むgetsをベースにしているが、getsはセキュリティ上の問題…

malloc

mallocは、指定されたサイズのメモリを動的に割り当てるC標準ライブラリ関数・・・。Man page of MALLOC引数には、割り当てるメモリのサイズを指定する・・・。 戻り値には、割り当てたメモリ領域の先頭アドレスが返ってくる・・・。これを使って、int型の動…

strcmp

strcmpは文字列同士を比較し、どちらがASCIIコード順で先か後かを判定する・・・。Man page of STRCMP戻り値が負の値の場合は、第1引数の文字列が先、 戻り値が正の値の場合は、第2引数の文字列が先、 戻り値が0の場合は、2つの文字列は等しいと判定する・・…

strcat

strcatは、文字列を別の文字配列の末尾に連結するC標準ライブラリ関数・・・。Man page of STRCAT第1引数に連結先の文字配列、第2引数に連結元の文字列を指定する・・・。 後ろから前に連結・・・。 コピー先の文字配列はNULL終端である(NULL文字で終わって…

strcpy

strcpyは、文字列を別の文字配列にコピーするC標準ライブラリ関数・・・。Man page of STRCPY第1引数にコピー先の文字配列、第2引数にコピー元の文字列を指定する・・・。 後ろから前にコピーという感じ・・・。 コピー先の文字配列は、コピー元の文字列、そ…

strlen

strlenは、文字列の長さを取得するC標準ライブラリ関数・・・。Man page of STRLEN引数に対象となる文字列(文字列リテラルや文字配列)を指定すると、戻り値として文字列の長さをバイト数で返す・・・。 文字列の長さとは言ったが、バイト単位で返すので文字…

文字列

これまでも散々扱ってきた文字列について改めて・・・。文字列は、 文字列リテラル 文字配列 に分けられる・・・。文字列リテラルは、任意のメモリが確保され、それぞれの文字が指定の文字に固定される・・・。 プログラム中でメモリを確保していないので、…

fscanf

fscanfはファイルから読み込んだデータを、指定の書式に基づいて、指定の変数や配列などに格納するC標準ライブラリ関数・・・。Man page of SCANFの2番目がfscanf、ファイルポインタ以外はscanfと同じ・・・。"test.txt"からスペース区切りのデータを読み込…

fprintf

fprintfは指定された書式でファイルに出力するC標準ライブラリ関数・・・。Man page of PRINTFの2番目にあるのがfprintfで、名前の通りprintfのようにファイルに出力できる・・・。"test.txt"に、入力された名前(name)、年齢(age)、住所(address)、を出力す…

fopen

ファイルに読み書きをするには、まず"開く"という行為をしなければならない・・・。fopenは指定されたファイル名のファイルを開くC標準ライブラリ関数・・・。Man page of FOPENここでは"test.txt"というテキストファイルを開いてみる・・・。ファイルへの入…

構造体

いくつかの異なる型の要素をまとめて、1つの新しい型として扱うことができるのが、構造体・・・。ここでは、名前、年齢、住所(といっても都道府県ぐらいでいいが)という3つの要素を、1つにまとめた簡易名簿の構造体を定義し、その構造体の変数各要素に入力さ…

ポインタ

ポインタは、変数のアドレスを格納するための変数・・・。たいていの変数は、メモリ上に割り当てられているので、そのメモリのアドレスがわかれば値にアクセスできる・・・。 そのメモリのアドレスを格納することができるのがポインタと呼ばれる特殊な変数・…

配列

これまでにも何度か出てきてる配列について・・・。配列は、同じ型のメモリ領域を連続して確保したもので、 <型名> <配列名>[<要素数>];このように宣言する・・・。たとえば、 int a[10]; は要素数10のint型配列aで、int型変数10個分に相当する・・・。ここ…

関数

これまで、プログラムをすべてmain関数の中に書いてきたが、 プログラムが巨大になってくると、読みにくいし、保守性も悪い・・・。いくつかの処理をまとめて、ひとつの関数とすることで、 ひとつひとつのコードは短く読みやすくすることができる・・・。mai…

for文

for文も繰り返し処理の構文の一種・・・。 条件式に加えて、初期化式、増分式を設定できる・・・。 for (<初期化式>; <条件式>; <増分式>){ <繰り返したい処理>; }式で初期値が決まり、とで回数も決まるので、繰り返す回数が決まっている処理の場合はこちら…

do-while文

do-while文も繰り返し処理の構文の一種・・・。do-whileは、 do{ <繰り返したい処理>; }while (<条件式>);と書く・・・。 while文と違うのは、条件式が後ろにあるということ・・・。 そして、これにより、最初の1回は無条件で必ず実行されるという特徴がある…

while文

特定の処理を繰り返したい場合は、繰り返し処理の構文を使う・・・。whileは、 while (<条件式>){ <繰り返したい処理>; }と、書くことでが真(非ゼロ)である間は、を繰り返す・・・。ここでは、入力されたn, m(n まずは、変数の宣言・・・。開始値のn、終了値…