这就是我所做的:
#include <stdio.h>
#include <stdlib.h>
int betweenArray(int a, int b){
int *arr,i,range;
range = b - a + 1;
arr = (int *)malloc(range*sizeof(int));
for(i=0;i<range;i++){
arr[i] = a++;
}
return * arr;
int main (int argc, const char * argv[]) {
int a,b,i;
int range;
printf("Give numbers: ");
scanf("%d %d",&a,&b);
range = b - a + 1;
for(i=0;i<range;i++)
printf("%d\n",betweenArray(a,b));
return 0;
}
所以,当我运行这个并给出例如2和5作为参数时,我得到结果:2 2 2 2而不是2 3 4 5.我无法找到我犯错的地方。
答案 0 :(得分:1)
此代码存在多个问题,这都是由于对指针的单一误解及其与C中数组的关系。
betweenArray
应该返回int*
,而不是int
arr
betweenArray
一次并存储其结果,而不是在循环中调用free
betweenArray
答案 1 :(得分:1)
问题是你正在计算序列,但你只返回它的第一个数字。
betweenArray
的返回值为int
而不是int *
,而您return * arr;
代替return arr;
。修好后,在main
中,您需要执行以下操作:
int *sequence = betweenArray(a,b);
for (i=0;i<range;i++)
printf("%d", sequence[i];
但是如果函数返回数组及其中的元素数量会更好,例如:
int *betweenArray(int a, int b, int *numElements){
int *arr,i,range;
range = b - a + 1;
arr = (int *)malloc(range*sizeof(int));
for(i=0;i<range;i++){
arr[i] = a++;
}
if (numElements) {
*numElements = range;
}
return arr;
}
int main (int argc, const char * argv[]) {
int a,b,i;
int *sequence;
int range;
printf("Give numbers: ");
scanf("%d %d",&a,&b);
sequence = betweenArray(a,b,&range);
for(i=0;i<range;i++)
printf("%d\n",sequence[i]);
free(sequence); // Be nice, clean up.
return 0;
}
答案 2 :(得分:0)
您正在使用相同的参数调用betweenArray(),这些参数对于通过for循环的不同运行不会更改 - 因此您将始终获得相同的结果。你必须使用索引调用betweenArray(),或者调用它一次并返回一个数组。
答案 3 :(得分:0)
你的函数返回数组的第一个元素,它与'a'相同。真的,我完全混淆了你想做的事情。用于betweenArray()的上下文是迭代器,这在C中是不可能的。
如果你想使用迭代器这样做,你应该使用三个函数:1)创建它(可能是分配结构和设置值),2)从它获得下一个值或结束标记,3)deinit和解除分配。
OTOH这对于'for'循环来说非常简单。