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 字节(或一个字)。

考虑到这一点,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 中,您不能“插入”值。首先,您必须使用任一声明 [global] 表 A

int A[10];

假设 10 是大小,基于for循环限制,或

int *A;

然后在代码中的其他地方:

A = malloc (10 * sizeof *A);

所以你将有一个空间分配给 10 个元素。然后你可以设置每个元素的 wa 值(就像你做compare()赋值一样)。

于 2012-06-05T20:05:01.600 回答