简体   繁体   中英

How do i pass an array function without using pointers

在接受采访时我被问到如何在不使用任何指针的情况下将数组传递给函数但是它似乎是不可能的或有办法做到这一点?

Put the array into a structure:

#include <stdio.h>
typedef struct
{
  int Array[10];
} ArrayStruct;

void printArray(ArrayStruct a)
{
  int i;
  for (i = 0; i < 10; i++)
    printf("%d\n", a.Array[i]);
}

int main(void)
{
  ArrayStruct a;
  int i;
  for (i = 0; i < 10; i++)
    a.Array[i] = i * i;
  printArray(a);
  return 0;
}

How about varargs? See man stdarg . This is how printf() accepts multiple arguments.

If i say directly then it is not possible...!

but you can do this is by some other indirect way

1> pack all array in one structure & pass structure by pass by value

2> pass each element of array by variable argument in function

You can put the array into a structure like this:

struct int_array {
    int data[128];
};

This structure can be passed by value:

void meanval(struct int_array ar);

Of course you need to now the array size at compile time and it is not very wise to pass large structures by value. But that way it is at least possible.

simply pass the location of base element and then accept it as ' int a[] '. Here's an example:-

    main()
    {
        int a[]={0,1,2,3,4,5,6,7,8,9};
        display(a);
    }
    display(int a[])
    {
        int i;
        for(i=0;i<10;i++) printf("%d ",a[i]);
    }
void func(int a)
{
   int* arr = (int*)a;
   cout<<arr[2]<<"...Voila" ;
}

int main()
{
   int arr[] = {17,27,37,47,57};
   int b = (int)arr;
   func(b);
}

There is one more way: by passing size of array along with name of array.

int third(int[], int ); 

main() {
   int size, i;
   scanf("%d", &size);
   int a[size];
   printf("\nArray elemts");
   for(i = 0; i < size; i++)
       scanf("%d",&a[i]);
   third(a,size);
}
int third(int array[], int size) {
    /* Array elements can be accessed inside without using pointers */
} 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM