構造体

タイプ1 基本形 構造体の宣言+変数の宣言

struct Syain {
	char* name;
	int age;
};
struct Syain syain; // 構造体の変数の宣言
 

タイプ2 構造体の宣言と同時に変数の宣言

struct Syain2 {
	char* name;
	int age;
} syain2a = {"kogekoge", 14}; // 宣言と同時に初期かも出来ます
struct Syain2 syain2b = {"hogehoge", 14}; // 宣言と同時に初期かも出来ます
 

タイプ3 typedefで構造体に名前を付加

typedef struct Syain3 {
	char* name;
	int age;
}Syain3a; // Syain3とする事も可能です
Syain3a syain3a = {"hogehoge", 14}; // 名前で変数を宣言
struct Syain3 syain3b = {"hogehoge", 14}; // 通常の宣言も使えます
typedef Syain3a Syain3c; // 更に別名を付けることも可能
 

タイプ4 無名構造体

struct { // 構造体の名前を省略
	char* name;
	int age;
}syain4 = {"hogehoge", 14}; // この構造体は、ここ以外での変数宣言が出来ない
 

関数

void func(); // 宣言
void funt() { /* 処理 */ }
int func(int param1, char* param2); // 戻り値あり
int func(int param1, char* param2){ return 0; }
 

複数ファイルのプログラム

ファイル名:hogehoge.h
void func(); // 関数宣言
extern char* lastParam; // hogehoge.cの変数を外部からアクセス可能にする
ファイル名:hogehoge.c
char* lastParam; // 変数
// 関数実装
void func(char* param1) {
	printf("Welcome!! %s\n", param1);
	lastParam = param1;
}
 
ファイル名:main.c
#include<stdio.h>
#include "hogehoge.h" // hogehoge.hをインクルードするとfuncを使えるようになる
int main(void) {
	func("hogehoge"); // hogehoge.cの関数を使う
	printf("Direct Access lastParam %s\n", lastParam); // hogehoge.cの変数にアクセス
	func("mogemoge");
	printf("Direct Access lastParam %s\n", lastParam);
	return 0;
}
 

実行結果
Welcome!! hogehoge
Direct Access lastParam hogehoge
Welcome!! mogemoge
Direct Access lastParam mogemoge
 

変数の宣言

int i;
int i=0;
int x=0,y=0;
 

配列の宣言

 
{{
int intAry[4];
int intAry2[4] = {1,2,3,4};
int intAry3[4] = {0};// 全て0で初期化
int intAry4[4][3] = {0}; // 二次元配列
}

ポインタ変数の宣言

int* pIntValue;
 

ポインタ(アドレス)を取得

int* pIntValue = &intValue; // &変数名
int* pIntAry = intAry; // 配列の添字を書かないとポインタになる
int* pIntAry2 = &intAry[0]; // 配列の先頭の要素のポインタも同じ
 

ポインタから実体を参照

int intValue = *pIntValue;
int intValue = pIntValue[0]; // ポインタでも添え字を付けると実体になる
char c = *str;
char c = str[0];
 

メモリをコピーする

// パラメータ
// コピーされるアドレス,コピー元のアドレス,コピーするサイズ
// #include<string.h> 必要
memcpy(intAry[4], &intAry2[0], sizeof(intAry));
 

数値を文字列に変換する

char str[4]; // \0の分が必要なので1文字分多く確保する
int a = 100;
sprintf(str, "%d", a);
printf("%d\n", a); // 数値を標準出力に出力する際よく使われる
 
// #include <stdlib.h> 必要
itoa(a, str, 10); // 10進数
itoa(a, str, 8); // 8進数
itoa(a, str, 16); // 16進数
 

文字を数値に変換する

// #include <stdlib.h> 必要
int a = atoi(str);
 

fscanf ファイルから一行ずつ読み込んでフォーマットにしたがって変数に値を格納する

int a;
int b;
char* str[100];
while (fscanf(fp, "%s %d %d", str, &a, &b) != EOF) {
	printf("%s %d %d\n", str, a, b);
}
 

アフィリエイト ここまで