无法让我的指针发送对数组的引用

Can't get my pointers to send a reference to the array

本文关键字:数组 引用 我的 指针      更新时间:2023-10-16
#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:nn");
    scanf("%d", &N);
    for (i = 0; i < N; i++)
        arr[i]=  rand();
    getEvenNumbers (arr, N);
        printf("nnEven numbers in the array are as follows:nn");
    for (i = 0; i < N; i++)
        {
        a[i]= *(p+i);
      printf("n[%d] = %d", (i+1), a[i]);
        }
}

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

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

获取偶数

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

void getEvenNumbers(int arr[], int N(

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

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

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

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

a[i]分配给随机地址。您应该尝试重写此程序。这个程序中有很多错误,我什至没有纠正。在谷歌上查找finding even numbers in array program或类似的东西,看看这些例子的代码。

编辑:

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

堆栈溢出

sanfoundry.com

调用方已经知道数组的地址,所以你只需要返回新的长度。 如果我们还删除未使用的变量并利用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("nnEven numbers in the array are as follows:nn");
for (i = 0; i < k; i++) {
    printf("n[%d] = %d", (i+1), arr[i]);
}

从堆动态分配内存。

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:nn");
    scanf("%d", &N);
    int arr[N];
    for (i = 0; i < N; i++)
        arr[i]=  rand();
    int *a=getEvenNumbers (arr, N);
    printf("nnEven numbers in the array are as follows:nn");
    for (i = 1; i <= a[0]; i++)
      printf("n[%d] = %d", (i), a[i]);  
   delete []a;      
}

更好的选择是使用 std::vector .你可以在这里阅读。