SAK 図書館
パソコン基礎知識 C 言語編 (その五) 配列、ポインタ、構造体
■配列
・配列変数は次のように宣言する。
int a[10];
char b[11];
** a[10]; は、a[0] ... a[9] の 10 個の配列となる。VB と違うので注意!!
** char b[11]; は、11 個の文字を格納することができるが、一般的には文字
列格納するのに使用される。文字列の最後には NULL コードが必要なので、
実際には、11 個の配列に 10 個の文字しか格納できない。
■ポインタ
・ポインタはメモリアドレスと似ているが、少し操作が違う。
配列を参照する場合、添字を使用するよりポインタを使用する方がコードが
高速になるのが一般的である。
・p++ は、ポインタがインクリメントされ、その変数タイプの次の記憶領域に
位置付けされる。アセンブラのメモリアクセスとは少し違う。
int *p;
■構造体
・構造体はいくつかの記憶タイプをまとめて、レコードのように扱う。
(ユーザ定義型)
typedef struct {
char cmd[21];
char para[201];
} LIN;
■サンプルコード
/*
========================================================================
配列、ポインタ、構造体テスト
========================================================================
proj0004.c version 1.00 Copyright(C) 2001 Y.SAK
*/
// インクルードヘッダ
#include <stdio.h>
#include <string.h>
// 定数
#define REC_MAX 10
// 構造体
typedef struct {
int cmd;
char para[20];
} REC;
// 関数プロトタイプ宣言
int main(void);
/*
========================================================================
メイン
========================================================================
*/
int main(void)
{
REC a[REC_MAX];
int i;
REC *p;
// 添字による配列アクセス
for(i = 0; i < REC_MAX; i++) {
a[i].cmd = i;
strcpy(a[i].para, "あいうえお");
}
printf("-- 添字による配列アクセス --\n");
for(i = 0; i < REC_MAX; i++) {
printf("%d - %s\n", a[i].cmd, a[i].para);
}
// ポインタによる配列アクセス
for(i = 0, p = &a; i < REC_MAX; i++, p++) {
p->cmd = i;
strcpy(p->para, "あいうえお");
}
printf("-- ポインタによる配列アクセス --\n");
for(i = 0, p = &a; i < REC_MAX; i++, p++) {
printf("%d - %s\n", p->cmd, p->para);
}
return(0);
}
■パソコン基礎知識 C 言語編資料
■プログラミング言語資料
■パソコン基礎知識 ハード編資料
■パソコン基礎知識 画像編資料
■パソコン基礎知識 Windows 編資料
■コンピュータシステム導入編資料