簡體   English   中英

無法獲取我的指針以發送對數組的引用

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

#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]);
        }
}

請我知道這對你們來說可能很容易,但是我需要幫助弄清楚如何在不刪除數組的所有值的情況下返回指向數組的指針,而且我不能使用全局變量,它必須是一個函數返回指向數組的指針

首先,減小這些數組的大小,您不需要那么多空間。 第二,你做了

getEvenNumbers

函數返回一個int * ,而不是一個int arr[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或類似finding even numbers in array program的代碼,然后查看這些示例的代碼。

編輯:

我找到了一些代碼示例供您使用。 希望對您有所幫助!

堆棧溢出

sanfoundry.com

從堆動態分配內存。

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 。您可以在此處閱讀。

調用方已經知道數組的地址,因此您只需要返回新的長度即可。 如果我們還刪除未使用的變量並利用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]);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM