【发布时间】:2021-03-25 18:06:58
【问题描述】:
尝试创建一个 void 函数以将 a[n] 数组的副本返回到 b[n] 数组。我也试图颠倒数组的顺序。每次我返回它时,我都会得到一堆随机输出数字,而不是数组中的数字。我不太确定它从哪里获得随机数,任何帮助都会很棒。我在这里查看了其他类似的问题,但似乎无法让它为我工作。的函数名称必须保持不变。
void copy(int n, int a[n], int b[n]){
for(int i = 0; i < n; ++i){
b[i] = a[i];
}
}
void reverse(int n, int a[n]){
int rev = n - 1;
int stop = n -1;
for (int i = 0; i < n / 2; i++){
rev = a[i];
a[i] = a[stop];
a[stop] = rev;
stop--;
}
}
int main() {
int a[N] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int b[N];
printf("This is an array: ");
print(N, a);
copy(N, b, a);
printf("This is a copy of the array: ");
print(N, b);
printf("This array is the reverse of the original array: ");
reverse(N, b);
print(N, b);
printf("\n");
}
我仍然得到这个作为输出。
这是一个数组:0 1 2 3 4 5 6 7 8 9
这是数组的副本:91455776032616 0 0-47662827221932-4766295202193254227025632766
这个数组是原数组的逆:91455776032616 0 0-47662827221932-4766295202193254227025632766
【问题讨论】:
-
数组通常不会被
'\0'终止。只有字符串。您正在传递长度,为什么不使用它?你也想要b[i] = a[i];而不是b[n] = a[n]; -
并且仅供参考,
main中的copy(N, b, a);将a定位为复制目标,使用b作为复制源。因为b没有初始化......是的。即使在修复循环之后,这仍然是错误的。 -
循环条件应该是
i < n -
也只是备注,
void函数,即返回类型为void的函数不会“返回”值,因此您的表达式“尝试创建一个 void 函数以返回...”的副本不正确。当你使用“return”这个词时,意味着你的函数会有一个返回值,因此返回类型不能是void。 -
我忘了提到函数的名称需要保持不变。