我创建了一个函数,该函数根据一个数字提供一定范围的数字,并且您想要获取的数字数量与该数字不同(我知道,这种解释有点含糊,所以这里有一个示例):
Number of origin: 10
Number of numbers to count away from the origin: 5
Output:
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
下面是代码:
#include <stdio.h>
#include <stdlib.h>
void plusMinus(int*change, int num, int funcTo){
int range = funcTo * 2;
int start = num - funcTo;
int i;
for (i=0; i<=range; i++){
change[i] = start + i;
}
}
int main()
{
int* pointer;
plusMinus(&pointer, 250, 5);
int x;
for (x=0; x<=10; x++){
printf("%d\n", &pointer[x]);
}
return 0;
}
这是所需的输出:
245
246
247
248
249
250
251
252
253
254
255
这是当前输出:
245
249
253
257
261
265
269
273
277
281
285
代码也返回两个警告,但是我不知道它们是什么意思。这是第一个:
warning: passing argument 1 of 'plusMinus' from incompatible pointer type [-Wincompatible-pointer-types]
这是第二个:
warning: format '%d' expects argument of type 'int', but argument 2 has type 'int *' [-Wformat=]
答案 0 :(得分:0)
第一个函数参数的类型为int *
void plusMinus(int*change, int num, int funcTo){
但是您传递的是int **
类型的参数
int* pointer;
plusMinus(&pointer, 250, 5);
此外,指针pointer
未初始化,并且具有不确定的值。结果,该程序具有未定义的行为。
在printf
的通话中
printf("%d\n", &pointer[x]);
在传递类型%d
的对象时,转换说明符int
期望类型为int *
的对象。
这是您更新的程序
#include <stdio.h>
void plusMinus( int *a, int num, int funcTo )
{
int range = 2 * funcTo + 1;
int start = num - funcTo;
for ( int i = 0; i <range; i++ )
{
a[i] = start + i;
}
}
int main(void)
{
int funcTo = 5;
int a[2 * funcTo + 1];
plusMinus( a, 250, funcTo );
for ( int i = 0; i < 2 * funcTo + 1; i++ )
{
printf( "%d ", a[i] );
}
putchar( '\n' );
return 0;
}
其输出为
245 246 247 248 249 250 251 252 253 254 255
将函数编写为递归函数更有趣。
您在这里。
#include <stdio.h>
void plusMinus( int *a, int num, int funcTo )
{
a[0] = num - funcTo;
if ( funcTo )
{
plusMinus( a + 1, num, funcTo - 1 );
a[2 * funcTo] = num + funcTo;
}
}
int main(void)
{
int funcTo = 5;
int a[2 * funcTo + 1];
plusMinus( a, 250, funcTo );
for ( int i = 0; i < 2 * funcTo + 1; i++ )
{
printf( "%d ", a[i] );
}
putchar( '\n' );
return 0;
}
程序输出与上面显示的相同。
245 246 247 248 249 250 251 252 253 254 255