0

ポインターの理解に問題があります

行列があり、それを使用して小さなブロックに分割しました

 tiles_num = n /tile;
// Allocate blocked matrix
Ah = (REAL **) malloc( tiles_num *  tiles_num * sizeof(REAL *));
if (Ah == NULL) {
    printf("ALLOCATION ERROR (Ah)\n");
    exit(-1);
}

for (j = 0; j <  tiles_num *  tiles_num; j++) {
    Ah[j]=(REAL *) malloc(tile * tile * sizeof(REAL));
    if (Ah[ j ] == NULL) {
        printf("ALLOCATION ERROR (Ah[%d] )\n", j);
        exit(-1);
    }
}

ここで (tiles_num は小さなブロックの数、n は行列の 1 次元のサイズ、tile は小さなブロックのサイズ)

その後、スーパーブロックの開始点へのポインタだけを関数に与えたいとします。たとえば、N = 12 でスーパーブロック = 4 とスモールブロック = 2 の場合、関数はスモール ブロック間を移動します。1-では、スーパーブロックを開始してから小さなブロックごとに移動する機能ポイントをどのように与えることができますか?

2-A[k] が参照する A+k と同じかどうか知りたいですか?

4

1 に答える 1

0

私が質問を正しく理解していれば、Ah は小さなブロックのリストへのポインタであるため、単に Ah を関数に渡すことができます。それはあなたの質問に答えていますか?

2 番目の質問について、A[k] はアドレス A+k の値です。したがって、A[k] は実際には *(A+k) と同等であり、逆に &(A[k]) は A+k と同等です。

于 2012-04-30T01:31:38.160 に答える