0
int i;
void set_array(int num) {
    for (i=0; i<10;i++) {
        A[i] = compare(num,i);
    }
}

int compare (int a, int b) {
    if ((a-b) >= 0)
        return 1;
    else return 0
}

ここでいくつかの問題を取得します。

私の主な問題は次のとおりです。compare(num,i) を A[i] にどのように挿入できますか?

ところで、私は全くの初心者ですので、簡単に質問されてしまい申し訳ありません。

4

2 に答える 2

1

これは多段階のプロセスです。最初の部分は、比較する引数を渡して呼び出すことです。比較が完了すると、値が返されます。A[i] に格納するのはこの戻り値です。

次のように考えることができます。

int temp = compare(num,i);
A[i] = temp;

temp は $v0 (戻り値) にすぎません。

A[i] が A のアドレス + i * A の要素のサイズであるメモリ位置。この回答では、A の型を実際に指定していないため、int 配列であると仮定します。さらに、MIPS マシンでは int が 4 バイト (または 1 ワード) であると想定しています。

これを念頭に置いて、A[0] は A + 0 のアドレスです。A[1] は A + 4 のアドレスです。A[2] は A + 8 のアドレスです。

大まかな概要は次のとおりです。

set_array:
    # save $ra to stack
    la      $s1, A         # assuming $s1 isn't used for anything
    # loop code starts here
                           # A[i] = compare(num,i);
    move    $a0, $a0       # num (Here for completeness, it does nothing)
    move    $a1, $s0       # I am just assuming variable 'i' is in $s0
    jal     compare        # call compare
    sw      $v0, 0($s1)    # store the return value in A+4*i
    addiu   $s1, $s1, 4    # inc it by 4, for the next element
    # i = i + 1
    # jump back up
    # restore $ra
    jr      $ra

# ...

compare:
    # code to compare and
    # return 1 or 0 in $v0
    jr      $ra
于 2012-06-06T05:34:21.980 に答える
1

C では、値を「挿入」することはできません。まず、[グローバル] テーブル A を次のいずれかで宣言する必要がありました

int A[10];

forループ制限に基づいて、サイズが 10 であると仮定するか、または

int *A;

次に、コード内の別の場所:

A = malloc (10 * sizeof *A);

そのため、10 個の要素に割り当てられたスペースがあります。次に、各要素の wa 値を設定できます (compare()代入の場合と同様)。

于 2012-06-05T20:05:01.600 に答える