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
}
在这里遇到一些问题。
我的主要问题是:如何将比较(num,i)插入A [i]?
顺便说一句,我完全是初学者,很抱歉,如果它太容易被问到了。
答案 0 :(得分:1)
在C中,您无法“插入”值。首先,您必须使用
声明[global]表A.int A[10];
假设10是大小,基于for
循环限制或
int *A;
然后代码中的其他地方:
A = malloc (10 * sizeof *A);
所以你将为10个元素分配一个空间。然后你可以设置w每个元素的值(就像你使用compare()
赋值)。
答案 1 :(得分: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