代码如下。调用函数reverse_array时,如何将第一个函数参数定义为数组?
#include <stdio.h>
void swap(int* a, int* b);
void reverse_array(int a[], int n) {
int* b = a + n - 1;
while (b > a) {
swap(a, b);
a = a + 1;
b = b - 1;
}
}
void swap(int* ptra, int* ptrb) {
int t;
t = *ptra;
*ptra = *ptrb;
*ptrb = t;
}
main() {
int b[5] = { 1,2,3,4,5 };
reverse_array(b[5], 5);
int x;
for (x = 0; x < 5; x++) {
printf("%d", b[x]);
}
}
答案 0 :(得分:1)
b[5]
不是整个数组,而是数组的第6个元素(索引从0开始),该元素不存在。
您应该改为传递b
。它将被转换为指向数组第一个元素的指针。
答案 1 :(得分:1)
编译器显示错误消息“使指针从整数生成而不进行强制转换”(反转数组)。我该如何解决?
请勿将int
传递到期望指针的位置。 :)
背景:
在函数定义的上下文中,类似int a[]
与int * a
相同,因此a
是指向int
的指针。
您的呼叫者传递了b[5]
,它是int
数组b
的第六个元素,因此它是int
(并且顺便说一句,是越界访问,就像在C数组中基于0
一样,因此b
的元素通过范围从0到4的索引来寻址。
要“传递”数组,只需给出b
。
reverse_array(b, 5);
然后将数组b
衰减到其第一个元素的地址。此地址在函数中作为值a
接收。
答案 2 :(得分:1)
写作时
`reverse_array(b[5], 5)`,
您要将int作为第一个参数而不是第一个参数传递给函数 整数数组。