SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

パソコン基礎知識 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 編資料
■コンピュータシステム導入編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2017 Y.SAK