c言語勉強記録(4)
構造体
1つのデータにまとめたい時に使用する。
・宣言
typedef struct {
const char *name;
int age;
} person;
・使い方
person a = {"はてな", 10};
printf("名前は%s 年齢は%i\n", a.name, a.age);
共用体
同じ"量"でも単位が違うとかいう時に使う。構造体と一緒に使うことが多い。
・宣言
typedef union{
short count; ←個数
float weight; ←重さ
float volume; ←大きさ
} quantity;
・使い方
typedef struct{
const char *name;
quantity q;
} fruit;
列挙型
・宣言
typedef enum {RED, BLUE, GREEN} colors;
・使い方
colors bad = RED
C言語勉強記録(3)
データ型
・小さい器に大きい値を入れてはダメ
int x = 100000;
short y = x;
※これは予期せぬことが起きる
・キャストで型を変えられる
int x = 5;
int y = 8;
float z = (float)x / y;
・関数の定義はヘッダーファイルに分割できる
◯◯.hファイルを作成→float add_value();を記入
#include "◯◯.h"を記入すればインクルードできる
C言語勉強記録(2)
・標準入力と標準出力と標準エラーがあるということ
stdin, stdout, stderr
scanfは fscanf を呼び、printfは fprintf を呼んでいる。
・fopenで独自のストリームを用意することができる。
FILE *fff = fopen("example.csv", "w");
fprintf(fff, "test");
・安全性チェックとしてfopenの引数を読み取る
fopen("example.csv","r"); はエラー時に0を返すので、if文で0が来たらエラーと判断
・コマンドライン引数を渡せる
int main(int argc, char *argv[])
argc:配列の数(実行するプログラム+渡された引数の数) なので引数が2コあれば3
argv[ ]:渡された引数の配列。
・オプションをつけられる
#include<unistd.h>を読み込み、getopt()関数を記述することでコマンドラインから
オプションを指定してプログラムを実行できる。
・所感
進むごとに複雑になっていく。。。