第7講 ポインタ
第7話 多次元配列と1次元配列の関係
前半は2次元配列、後半は1元配列を利用して実現するコード例
#include<stdio.h>
#include<stdlib.h> //malloc()を使うためにインクルード
void f(); //2次元配列による処理
void g(); //1次元配列による処理
int main() {
f();
printf("\n"); //改行
g();
return(0);
}
void f() {
int i, j;
//2次元配列の用意
int **a = (int **)malloc(sizeof(int *) * 7);
for (i = 0; i < 7; i++)a[i] = (int *)malloc(sizeof(int) * 6);
//データ作成
for (i = 0; i < 7; i++) {
for (j = 0; j < 6; j++) {
a[i][j] = 6 * i + j + 1;
}
}
//データの表示
for (i = 0; i < 7; i++) {
for (j = 0; j < 6; j++) {
if(a[i][j]<10)printf(" %d ",a[i][j]);
if (a[i][j]>=10)printf("%d ", a[i][j]);
}
printf("\n");
}
}
void g() {
int i, j;
//2次元配列の用意
int *a = (int *)malloc(sizeof(int) * 42);
//データ作成
for (i = 0; i < 7; i++) {
for (j = 0; j < 6; j++) {
a[6*i+j] = 6 * i + j + 1;
}
}
//データの表示
for (i = 0; i < 7; i++) {
for (j = 0; j < 6; j++) {
if (a[6 * i + j]<10)printf(" %d ", a[6 * i + j]);
if (a[6 * i + j] >= 10)printf("%d ", a[6 * i + j]);
}
printf("\n");
}
}
また、g()は
void g() {
int i, j;
//2次元配列の用意
int *a = (int *)malloc(sizeof(int) * 42);
//データ作成
for (i = 0; i < 7; i++) {
for (j = 0; j < 6; j++) {
*(a + 6 * i + j) = 6 * i + j + 1;
}
}
//データの表示
for (i = 0; i < 7; i++) {
for (j = 0; j < 6; j++) {
if (*(a + 6 * i + j) <10)printf(" %d ",*(a + 6 * i + j));
if (*(a + 6 * i + j) >= 10)printf("%d ", *(a + 6 * i + j));
}
printf("\n");
}
}
等でも大丈夫です。
次はf()が3次元で行ったことを、
g()は2次元で処理して、
を実現して下さい。