Передача двумерного массива в функцию в си
Автор 零 задал вопрос в разделе Другие языки и технологии
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;
Массив хранится в переменной, передаешь переменную и все.
В самой функции работаешь с переданной переменной.
void Randomize(int **a, int sizeI, int sizeJ)
какое там исключение?
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;
}
"двумерный массив, но не так void RandomizeArray(int arr[][5]..."
В C++ нет общего типа обычных двумерных массивов. Есть типы int arr[][1], int arr[2], ..
Придется использовать явное приведение типа, и указывать размер, а если хочешь без явного указания размера - используй все же векторы.