今週は,後期に学習した 配列 と ポインタ のまとめをします.
必ず,今週中に理解しましょう.
配列は,同じ型のデータを一つにまとめて扱うために編み出された方法です.多くのデータを扱うには,なくてはならないものです.配列を用いて,4つのint型変数を用意するには,
int a[4];
と配列を宣言します.
a
|
a[0] |
a[1] | |
a[2] | |
a[3] |
配列は,図のようなイメージとなり,4つの変数をまとめて配列aとして扱います.
ここで,中身 a[0] から a[3] (0から3の4個であることに注意)を配列 a の要素とよび,a[0] の 0 のことを,添え字とかインデックスと呼びます.
配列を初期化するには,{ } を使って値を列挙します.
int a[4] = { 1, 2, 3, 4 };
複数の文字(文字列)や日本語を扱うにはどうしたらよいでしょう.文字を組み合わせて配列にした,文字列を用います.文字列をプログラム中で記述するときは,ダブルクオーテーションで囲みます.(例:"ABC","日本")
char a[4] = "ABC";
a
|
a[0] | 'A' |
a[1] | 'B' | |
a[2] | 'C' | |
a[3] | '\0' |
文字列を初期化するには,
char c[5] = "ABCD";
とします.文字列の代入は,初期化時のみ行うことができます.
プログラムの途中で,
c = "ABCD"; /* これは,できない */
と代入することはできません.
データのメモリアドレスを指し示す(ポイントする)ための変数
ポインタ変数の値 = メモリアドレス
参考 : 普通の変数の値 = 数値や文字
例:
#include <stdio.h> void main() { int a, b; int *p; a = 3; printf("aのアドレスは,%x です\n", &a); p = &a; printf("ポインタ変数の値(アドレス)は,%x です\n", p); printf("ポインタ変数のさしている値は,%d です\n", *p); b = *p; printf("bの値は,%d です\n", b); }
配列の名前そのものは,実は,配列の最初の要素を指し示すポインタです.
int a[4];
a
|
*a | a[0] |
*(a+1) | a[1] | |
*(a+2) | a[2] | |
*(a+3) | a[3] |
例を見てみましょう.
#include <stdio.h> void main() { int a[5] = {10, 20, 30, 40, 50}; /* 配列 */ int *p; /* ポインタ変数 */ int b, c; printf("配列aの先頭のアドレスは,%x です\n", a); printf("aのさしている値は,%d です\n", *a); p = a+2; /* pは,aから2つ先をさします */ printf("a[2]の中身は,%d です\n", *p); b = *(a+3); /* bは,aから3つ先の値が代入されます */ printf("a[3]の中身は,%d です\n", b); c = *a+3; /* cは,a[0]の値に3足した値が代入されます */ printf("a[0]+3 は,%d です\n", c); }
例で,違いを見てみましょう.
#include <stdio.h> void main() { char c[5] = "ABC"; /* 文字列 */ char *p = "ABC"; /* ポインタ変数を用いた文字列の初期化 */ c = "DEF"; /* これはエラー */ p = "DEF"; /* これは正しい */ printf("c = %s \n", s); printf("p = %s \n", p); }
後期に出された演習のうち,仕上げていない物を,今週中に提出する.
Oh-o! Meijiのレポートから(第5回)のところへ,演習で作成したプログラムを送る.プログラムには必ず,学年,組,番号,氏名を記入すること.