无法获取指针以发送对数组的引用

时间:2015-04-01 02:32:50

标签: c++ arrays function pointers

#include<stdio.h>
#include<stdlib.h>

int* getEvenNumbers(int arr[], int N)
{
    int i, k = 0 , a[50], p;
    for (i = 0; i < N; i++)
       {
           if (arr[i] % 2 == 0)
            {
              arr[k]=arr[i];
               k++;
            }
       }

      return arr[k];
}



int main ()
{
int i, arr[5000000], N, a[500000], k, *p;

    printf("\nEnter your desired length of the array:\n\n");
    scanf("%d", &N);

    for (i = 0; i < N; i++)
        arr[i]=  rand();

    getEvenNumbers (arr, N);

        printf("\n\nEven numbers in the array are as follows:\n\n");
    for (i = 0; i < N; i++)
        {
        a[i]= *(p+i);
      printf("\n[%d] = %d", (i+1), a[i]);
        }
}

请知道这对你们来说可能很容易但我需要帮助弄清楚如何在没有我的数组的所有值被删除的情况下返回指向数组的指针,我也不能使用全局变量必须是一个返回指向数组

的指针的函数

3 个答案:

答案 0 :(得分:1)

首先,减少那些数组的大小,你不需要那么多空间。其次,你做了你的

  

getEvenNumbers

函数返回int *,而不是intarr[k]不是int *。如果在调用函数时没有分配任何内容,我也不明白为什么要返回一些东西。您只需将返回类型更改为void

  

void getEvenNumbers(int arr [],int N)

您也永远不会为p分配任何内存。你可以做到

  

p =(int *)malloc(sizeof(int));

由于您从未为p分配任何内存,因此以下代码行

  

a [i] = *(p + i);

a[i]分配给随机地址。你应该尝试重写这个程序。在这个程序中有一个很多错误,我甚至都没有纠正。在Google上查找finding even numbers in array program或类似内容,然后查看这些示例的代码。

编辑:

我找到了一些代码示例供您使用。我希望它有所帮助!

StackOverflow

sanfoundry.com

答案 1 :(得分:0)

从堆中动态分配内存。

int* a= new int [N];
//Now store the elements from index 1.
// at a[0] store the number of even number you  have found in this function.
return a;

main中你知道有多少偶数。

 int *a1=getEvenNumbers(arr,n);
 count_even=a1[0];
 for(index=1;index<=count_even;index++)
   cout<<a1[index];

这里给出了代码 -

#include<stdio.h>
#include<stdlib.h>
int* getEvenNumbers(int arr[], int N)
{
    int i, k = 1 ,  p;
    int* a=new int[N+1];
    for (i = 0; i < N; i++)
       {
           if (arr[i] % 2 == 0)
              a[k++]=arr[i];
       }
    a[0]=k-1;
      return a;
}

int main ()
{
int i,  N;

    printf("\nEnter your desired length of the array:\n\n");
    scanf("%d", &N);
    int arr[N];
    for (i = 0; i < N; i++)
        arr[i]=  rand();

    int *a=getEvenNumbers (arr, N);
    printf("\n\nEven numbers in the array are as follows:\n\n");
    for (i = 1; i <= a[0]; i++)
      printf("\n[%d] = %d", (i), a[i]);  
   delete []a;      
}

更好的选择是使用std::vector。您可以阅读here

答案 2 :(得分:0)

调用者已经知道数组的地址,所以你只需要返回新的长度。如果我们还删除未使用的变量并利用C ++声明,我们将:

int getEvenNumbers(int* arr, int N)
{
    for (int i = 0, k = 0; i < N; i++) {
       if (arr[i] & 1 == 0) { // even if lowest bit is zero
          arr[k] = arr[i];
          k++;
       }
    }

    return k;
}

现在您可以轻松打印偶数:

int k = getEvenNumbers(arr, N);

printf("\n\nEven numbers in the array are as follows:\n\n");
for (i = 0; i < k; i++) {
    printf("\n[%d] = %d", (i+1), arr[i]);
}