ページ 11

配列

Posted: 2015年12月07日(月) 15:22
by 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; 
この配列の式の意味が分からないのですが、どのように動作しているのか教えていただきたいです。

Re: 配列

Posted: 2015年12月08日(火) 02:19
by かずま
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] |
       +---------+    +---------+---------+---------+---------+
これ、参考になりますか?