Как передать функцию массива без использования указателей

Меня попросили в интервью, как вы передаете массив функции без использования указателей, но это кажется невозможным или есть способ сделать это?

Ответ 1

Поместите массив в структуру:

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

Ответ 2

Как насчет varargs? См. man stdarg. Вот как printf() принимает несколько аргументов.

Ответ 3

Если я говорю прямо, тогда это невозможно...!

но вы можете сделать это с помощью другого непрямого способа

1 > упаковать весь массив в одну структуру и передать структуру путем передачи по значению

2 > передать каждый элемент массива переменным аргументом в функции

Ответ 4

Вы можете поместить массив в структуру следующим образом:

struct int_array {
    int data[128];
};

Эта структура может быть передана по значению:

void meanval(struct int_array ar);

Конечно, вам нужно теперь размер массива во время компиляции, и не очень мудро передавать большие структуры по значению. Но, по крайней мере, это возможно.

Ответ 5

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

Ответ 6

просто передайте местоположение базового элемента, а затем примите его как " int a []". Вот пример: -

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

Ответ 7

Есть еще один способ: передать размер массива вместе с именем массива.

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 */
}