mnb さんが書きました:コード:
int **FT
FT = new int*[15];
FT[0] = new int[15*15];
for(i=0;i<15;i++) FT[i] = FT[0] + i*15;
この配列の式の意味が分からないのですが、どのように動作しているのか教えていただきたいです。
FT は、次のプログラムの b に相当します。
コード:
#include <stdio.h>
void f1(void)
{
int a[3][4];
puts("stack:");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++)
printf(" %p", &a[i][j]);
printf("\n");
}
}
void f2(void)
{
int **b;
b = new int*[3];
b[0] = new int[3 * 4];
for (int i = 1; i < 3; i++) b[i] = b[0] + i*4;
puts("heap:");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++)
printf(" %p", &b[i][j]);
printf("\n");
}
delete[] b[0];
delete[] b;
}
int main(void)
{
f1();
f2();
return 0;
}
実行結果
コード:
stack:
00C9FC54 00C9FC58 00C9FC5C 00C9FC60
00C9FC64 00C9FC68 00C9FC6C 00C9FC70
00C9FC74 00C9FC78 00C9FC7C 00C9FC80
heap:
00DA6130 00DA6134 00DA6138 00DA613C
00DA6140 00DA6144 00DA6148 00DA614C
00DA6150 00DA6154 00DA6158 00DA615C
メモリ構成図
コード:
stack:
a
+---------+---------+---------+---------+
a[0] | a[0][0] | a[0][1] | a[0][2] | a[0][3] |
+---------+---------+---------+---------+
a[1] | a[1][0] | a[1][1] | a[1][2] | a[1][3] |
+---------+---------+---------+---------+
a[2] | a[2][0] | a[2][1] | a[3][2] | a[2][3] |
+---------+---------+---------+---------+
heap:
+---------+
b | * |
+----|----+
new int*[3] V new int[3 * 4]
+---------+ +---------+---------+---------+---------+
b[0] | *-------->| b[0][0] | b[0][1] | b[0][2] | b[0][3] |
+---------+ +---------+---------+---------+---------+
b[1] | *-------->| b[1][0] | b[1][1] | b[1][2] | b[1][3] |
+---------+ +---------+---------+---------+---------+
b[2] | *-------->| b[2][0] | b[2][1] | b[3][2] | b[2][3] |
+---------+ +---------+---------+---------+---------+
これ、参考になりますか?