第7講 ポインタ
第8話 3次元配列で行ったことを1次元配列で行う!
(前半はf()が3次元配列で行い、後半はg()が1次元で行う)を実現するプログラム例
#include<stdio.h>
#include<stdlib.h> //malloc()を使うためにインクルード
void f(); //3次元配列による処理
void g(); //1次元配列による処理
int main() {
f();
printf("\n"); //改行
g();
return(0);
}
void f() {
int i, j,k;
//3次元配列の用意
int ***a = (int ***)malloc(sizeof(int **) * 3);
for (i = 0; i < 3; i++)a[i] = (int **)malloc(sizeof(int *) * 4);
for (i = 0; i < 3; i++) {
for(j=0;j<4;j++)a[i][j] = (int *)malloc(sizeof(int) * 5);
}
//データ作成
for (i = 0; i < 3; i++) {
for (j = 0; j < 4; j++) {
for(k=0;k<5;k++)a[i][j][k] = 20 * i + 5 * j +k+ 1;
}
}
//データの表示
for (i = 0; i < 3; i++) {
for (j = 0; j < 4; j++) {
for (k = 0; k < 5; k++) {
if (a[i][j][k] < 10)printf(" %d ", a[i][j][k]);
if (a[i][j][k] >= 10)printf("%d ", a[i][j][k]);
}
printf("\n"); //改行
}
printf("\n"); //改行
}
}
void g() {
int i,j,k;
//1次元配列の用意
int *a = (int *)malloc(sizeof(int) * 60);
//データ作成
for (i = 0; i < 60; i++)a[i]= i + 1;
//データの表示
for (i = 0; i < 3; i++) {
for (j = 0; j < 4; j++) {
for (k = 0; k < 5; k++) {
if (a[20 * i + 5 * j + k] < 10)printf(" %d ", a[20 * i + 5 * j + k]);
if (a[20 * i + 5 * j + k] >= 10)printf("%d ", a[20 * i + 5 * j + k]);
}
printf("\n"); //改行
}
printf("\n"); //改行
}
}
ところで、ポインタってどういう意味だかわかりますか。
英語で書くとpointerです。
それを辞書で引くと、
『指すもの』や『指し棒』という意味だと出てきます。
パワーポイントでプレゼンするときにポインターや指し棒を使って、
説明しますね。
pointerをカタカナ表記するとしたら本当はポインターですよね。
しかし、−を付けない書き方がIT業界や理系の世界では多いようですね。
ポインタと書いていますが、プレゼンで使うポインターと同じです。
指し棒の代わりにレーザー光線を当ててポイントしますね。
ポインター(ポインタ)は指し示すものという意味を持っています。
でも何を指し示しているのでしょうか。