構造体
タイプ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 = &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);
}
アフィリエイト ここまで
最終更新:2012年09月23日 05:19