передача массива в функцию c



Передача двумерного массива в функцию в си

Автор задал вопрос в разделе Другие языки и технологии

C++: И снова передача двумерных массив в функцию.. . каким макаром это сделать? и получил лучший ответ

Ответ от Капитан Гугл[гуру]
Объясняю: массив - это ряд одинаковых значений (нет, я не Очевидность 🙂 ). Имя массива в C/C++ возвращает указатель на нулевой элемент массива. Статический двумерный массив - это массив массивов, а имя двумерного массива возвращает указатель на первый элемент, т. е. на массив фиксированного размера (!), и от этого никак не уйдешь: выражение a[1] означает *(a+sizeof(*a)), а раз a - массив массивов, то sizeof должен как-то вычисляться.
Поэтому либо делай динамический массив (массив ссылок, каждую инициализировать через new), либо вычисляй вручную смещения (ну ладно, не совсем вручную) :
void RandomizeArray(int *arr,...
for (int i = 0; i < arr_size_x; i++)
for (int j = 0; j < arr_size_y; j++)
arr[arr_size_y*i+j] = rand() % 100 - 50;

Ответ от Андрей Аксаментов[гуру]
Массив хранится в переменной, передаешь переменную и все.
В самой функции работаешь с переданной переменной.

Ответ от Namolem[гуру]
void Randomize(int **a, int sizeI, int sizeJ)
какое там исключение?

Ответ от DverZapili[гуру]
void RandomizeArray(int arr[][SEC_ARR_Y_SIZE], int arr_size_x, int arr_size_y)
...

Ответ от Антон ФАГ[гуру]
#include < stdio.h >
#include < stdlib.h >
#include < time.h >
void randomizeArray (int **arr, int x, int y)
{
for (int i = 0; i < y; i++)
{
for (int j = 0; j < x; j++)
{
arr[ i ][ j ] = 1 + rand() % 100;
printf("M", arr[ i ][ j ]);
}
putchar('\n');
}
}
int main ( void )
{
int **arr;
arr = ( int ** ) malloc (sizeof( int ) * 5);
for (int i = 0; i < 5; i++)
arr[ i ] = ( int * ) malloc (sizeof( int ) * 4);
srand( time( NULL ) );
randomizeArray(arr, 4, 5);
for (int i = 0; i < 5; i++)
free(arr[ i ]);
free( arr );
system("pause > nul");
return 0;
}

Ответ от Krab Вark[гуру]
"двумерный массив, но не так void RandomizeArray(int arr[][5]..."
В C++ нет общего типа обычных двумерных массивов. Есть типы int arr[][1], int arr[2], ..
Придется использовать явное приведение типа, и указывать размер, а если хочешь без явного указания размера - используй все же векторы.

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: C++: И снова передача двумерных массив в функцию.. . каким макаром это сделать?
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*