Brad
Brad

Reputation: 23

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

please i know this is probably very easy for you guys but i need help figuring out how to return a pointer to the array without all my values of my array getting deleted, also i can't use global variables and it has to be a function that returns a pointer pointing to the array

Upvotes: 0

Views: 66

Answers (3)

user2736738
user2736738

Reputation: 30926

Dynamically allocate memory from heap.

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;

In main you know how many even numbers are there.

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

The code is given here-

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

A better option is to use std::vector.You can read it here.

Upvotes: 0

Ben Voigt
Ben Voigt

Reputation: 283634

The caller already knows the address of the array, so you just need to return the new length. If we also remove the unused variables and take advantage of C++ declarations, we will have:

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;
}

Now you can print the even numbers easily:

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

Upvotes: 0

Greg M
Greg M

Reputation: 954

First of all, decrease the size of those arrays, you don't need that much space. Second of all, you made your

getEvenNumbers

function return an int *, and not an int. arr[k] is not an int *. I also don't get why you are returning something if nothing is being assigned when you call the function. You can just change the return type to void.

void getEvenNumbers(int arr[], int N)

You also never allocate any memory for p. You can do

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

And since you never allocated any memory for p, the following line of code

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

is assigning a[i] to a random address. You should just try to rewrite this program. There a lot of errors in this program that I didn't even correct. Go on Google an look up finding even numbers in array program or something similar and look at the code of those examples.

EDIT:

I found some code examples for you to use. I hope it helps!

StackOverflow

sanfoundry.com

Upvotes: 1

Related Questions