我的教授给了我这个
编写一个名为 getEvenNumbers 的函数。该函数的目的是处理 int 类型整数的输入数组并返回数组中的偶数列表。该函数需要能够处理任意长度的输入数组。函数的返回类型必须是“int *”,即指向int的指针,即函数返回一个指向偶数列表内存的指针。不允许使用全局变量。除了这些要求外,你可以自由来设计这个函数。你还需要编写一个测试程序(即主函数)来证明你的这个函数的设计和实现是正确的。你的测试程序需要执行以下操作:首先它要求用户输入一个正整数N,然后它生成一个长度为 N 的随机整数数组;然后调用函数 getEvenNumbers 来获取该数组中的偶数列表,最后打印该列表。
我想出了代码
#include <stdio.h>
int* getEvenNumber(int a[]);
int main (){
int N;
printf("Enter N: ");
scanf("%d", &N);
int *ptr[N];
int array[N], i;
int *test[N];
srand(time(NULL));
for(i = 0; i < N; i++)
{
array[i] = (rand() % 100)+1;
printf("%d \n", array[i]);
}
printf("------- \n");
*test = getEvenNumber(array);
for(i = 0; i <= sizeof(array); i++){
printf("%d \n", *test[i] );
}
return 0;
}
int* getEvenNumber(int a[])
{
int i,N = 0;
int *ptr[N];
for(i=0; i<=sizeof(a); i++)
{
if (a[i] % 2 == 0)
{
ptr[N] = &a[i];
printf("%d\n",*ptr[N]);
N++;
}
}
return *ptr;
}
但是,在打印所有偶数后,程序崩溃并返回错误 255。我想知道如何修复代码,以便它在打印数字后停止崩溃,任何帮助将不胜感激..
最佳答案
您的getEvenNumber()
不知道int a[]
的大小。 sizeof(a)
为您提供 int*
的大小(指针的大小是特定于系统的,例如在 64 位机器上为 8)。
为了修复您的设计,您必须以某种方式将数组的大小传递给 getEvenNumber() 函数。
尝试向其中添加第二个参数,例如:
int* getEvenNumber(int a[], int len)
然后您必须修改代码,如下所示:
#include <stdio.h>
#include <stdlib.h>
int* getEvenNumber(int a[], int* len);
int main (){
int N;
printf("Enter N: ");
scanf("%d", &N);
int array[N], i;
int *test;
srand(time(NULL));
for(i = 0; i < N; i++)
{
array[i] = (rand() % 100)+1;
printf("%d \n", array[i]);
}
printf("------- \n");
test = getEvenNumber(array,&N);
if(test)
{
for(i=0; i<N; i++)
{
printf("%d\n", test[i] );
}
free(test);
}
return 0;
}
int* getEvenNumber(int a[], int *len)
{
int i,eNum=0,j = 0;
int *ptr=0;
for(i=0; i<*len; i++)
{
if (a[i] % 2 == 0)
{
eNum++;
}
}
if(eNum>0)
{
ptr = (int*)malloc(eNum*sizeof(int));
for(i=0;i<*len;i++)
{
if (a[i] % 2 == 0)
{
printf("%d\n",a[i]);
ptr[j++]=a[i];
}
}
*len = eNum;
}
return ptr;
}
关于c - 接受输入数组并输出指向数组中所有偶数的指针的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34125963/