Передача двумерного массива в функцию в си
Автор 零 задал вопрос в разделе Другие языки и технологии
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], ..
Придется использовать явное приведение типа, и указывать размер, а если хочешь без явного указания размера - используй все же векторы.
что такое typedef struct в си? и для чего он нужен? какие у него функции и что будет без него?
>что такое typedef struct в си?
Объявление типа "структура".
>и для чего он
подробнее...
Народ, как задается двумерный массив в паскале??
Массивы, положение элементов в которых описывается двумя индексами, называются двумерными.
подробнее...
процедуры в Си
Да вроде всё правильно. С большой натяжкой процедурой в Си можно назвать функцию, которая не имеет
подробнее...
Функции div и mod в Си
Div эквивалент в Си это / если тип Int, а эквивалент mod
подробнее...
Динамический массив в Си
Операция new для языка C++, а в Си требуется такая конструкция при выделении памяти:
подробнее...
какова еденица измерения импульса тела в СИ? как она формулируется?
в СИ нет единиц измерения импульса
а вообще
подробнее...
Тритоны и характерные интервалы в си миноре. Пропустила тему, теперь ничего не могу разобрать...
Тритоны в миноре строятся (пишу по парам) на 2-й ступени (ум5) и 6-й ступени (ум4) и на 7-й
подробнее...
Файлы в Си
1. открываем файл на чтение/запись
2. читаем весь в строку
3. разбиваем на массив из
подробнее...
Люди!!!Как построить субдоминанту, доминанту и тонику в си бемоль мажоре и ре мажоре?
В си бемоль мажоре:
тоника: си бемоль-ре-фа
субдоменанта: ми бемоль-соль-си бемоль
подробнее...
1)как в си миноре будет Т5/3,S6/4,Д6/4,Д4/3.
Интересно, а где это сейчас учат так писать аккорды: 5/3,6/4,4/3???Исходя из Вашего написания,
подробнее...
Подскажите, как выглядит поездка из Бангкока в Сием Рип? сколько это по времени? есть ли замена транспорта на маршруте?
Самый быстрый и простой способ добраться из Бангкока в Сием Рип — полет на самолете. Но на
подробнее...
Как правильно использовать bool в си, си++? Если можно, пример с комментариями.
В Си типа bool нет!
В С++ есть 🙂
Используют так.. .
bool flag = true;
подробнее...