「C言語/サンプル/メモ」の編集履歴(バックアップ)一覧はこちら
「C言語/サンプル/メモ」(2012/09/23 (日) 05:19:47) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
** 構造体
*** タイプ1 基本形 構造体の宣言+変数の宣言
#highlight(c){{
struct Syain {
char* name;
int age;
};
struct Syain syain; // 構造体の変数の宣言
}}
*** タイプ2 構造体の宣言と同時に変数の宣言
#highlight(c){{
struct Syain2 {
char* name;
int age;
} syain2a = {"kogekoge", 14}; // 宣言と同時に初期かも出来ます
struct Syain2 syain2b = {"hogehoge", 14}; // 宣言と同時に初期かも出来ます
}}
*** タイプ3 typedefで構造体に名前を付加
#highlight(c){{
typedef struct Syain3 {
char* name;
int age;
}Syain3a; // Syain3とする事も可能です
Syain3a syain3a = {"hogehoge", 14}; // 名前で変数を宣言
struct Syain3 syain3b = {"hogehoge", 14}; // 通常の宣言も使えます
typedef Syain3a Syain3c; // 更に別名を付けることも可能
}}
*** タイプ4 無名構造体
#highlight(c){{
struct { // 構造体の名前を省略
char* name;
int age;
}syain4 = {"hogehoge", 14}; // この構造体は、ここ以外での変数宣言が出来ない
}}
** 関数
#highlight(c){{
void func(); // 宣言
void funt() { /* 処理 */ }
int func(int param1, char* param2); // 戻り値あり
int func(int param1, char* param2){ return 0; }
}}
*** 複数ファイルのプログラム
ファイル名:hogehoge.h
#highlight(c){{
void func(); // 関数宣言
extern char* lastParam; // hogehoge.cの変数を外部からアクセス可能にする
ファイル名:hogehoge.c
char* lastParam; // 変数
// 関数実装
void func(char* param1) {
printf("Welcome!! %s\n", param1);
lastParam = param1;
}
}}
ファイル名:main.c
#highlight(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;
}
}}
実行結果
#highlight(c){{
Welcome!! hogehoge
Direct Access lastParam hogehoge
Welcome!! mogemoge
Direct Access lastParam mogemoge
}}
*** 変数の宣言
#highlight(c){{
int i;
int i=0;
int x=0,y=0;
}}
*** 配列の宣言
#highlight(c){{
int intAry[4];
int intAry2[4] = {1,2,3,4};
int intAry3[4] = {0};// 全て0で初期化
int intAry4[4][3] = {0}; // 二次元配列
}
*** ポインタ変数の宣言
#highlight(c){{
int* pIntValue;
}}
*** ポインタ(アドレス)を取得
#highlight(c){{
int* pIntValue = &intValue; // &変数名
int* pIntAry = intAry; // 配列の添字を書かないとポインタになる
int* pIntAry2 = &intAry[0]; // 配列の先頭の要素のポインタも同じ
}}
*** ポインタから実体を参照
#highlight(c){{
int intValue = *pIntValue;
int intValue = pIntValue[0]; // ポインタでも添え字を付けると実体になる
char c = *str;
char c = str[0];
}}
*** メモリをコピーする
#highlight(c){{
// パラメータ
// コピーされるアドレス,コピー元のアドレス,コピーするサイズ
// #include<string.h> 必要
memcpy(intAry[4], &intAry2[0], sizeof(intAry));
}}
*** 数値を文字列に変換する
#highlight(c){{
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進数
}}
*** 文字を数値に変換する
#highlight(c){{
// #include <stdlib.h> 必要
int a = atoi(str);
}}
*** fscanf ファイルから一行ずつ読み込んでフォーマットにしたがって変数に値を格納する
#highlight(c){{
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);
}
}}
*** アフィリエイト &amazon2() ここまで