Меня попросили в интервью, как вы передаете массив функции без использования указателей, но это кажется невозможным или есть способ сделать это?
Как передать функцию массива без использования указателей
Ответ 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 */
}