Форум программистов, компьютерный форум, киберфорум
Наши страницы

C для начинающих

Войти
Регистрация
Восстановить пароль
 
Xadjee
2 / 2 / 0
Регистрация: 19.10.2014
Сообщений: 48
#1

Передача в функцию многомерного массива - C (СИ)

21.06.2016, 17:39. Просмотров 217. Ответов 5
Метки нет (Все метки)

Как передать в функцию многомерный массив при условии что он уже заранее известен и проинициализирован?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    double A[][3] = 
    {
        {2.1,   3,    2},
        {  1,   0,  1.3},
        {  5,   0,  7.4}
    };
    double B[][4] = 
    {
        { 15,   7.1,      1,      0},
        { -4,   -10,    2.3,      1},
        {  2,     0,     -5,    1.7},
        {0.4,   1.5,      1,      3}
    };
    double C[][3] = 
    {
        {6,     3.1,    4.7},
        {-3,      7,      0},
        { 1,    5.2,     -8}
    };
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2016, 17:39
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Передача в функцию многомерного массива (C (СИ)):

Передача массива в функцию - C (СИ)
Помогите раз и навсегда разобраться с проблемой передачи массива в функцию. Вот мой код, который создает массив и присваивает число...

Передача массива в функцию - C (СИ)
Что я делаю не так? Как конкретно передавать массив в функцию? #include <stdio.h> #define MAS 4999 int MINIM(int *S) { int K; ...

Передача массива в функцию - C (СИ)
/*Дано несколько чисел. Ввод чисел производить в главной программе. В первой функции высчитать среднеарифметическое. Во второй находит...

Передача массива в функцию - C (СИ)
Написал программу, я использовал глобальный массив а мне нужно в функцию передать массив используя адреса или ссылки, я не понимаю как это...

Передача массива в функцию - C (СИ)
Делал программу изначально что в самой подфункции объявлял массив, заполнял его числами и производил действия над ними, сейчас захотел...

Передача массива в функцию - C (СИ)
Здравствуйте. Код читает матрицу из файла и записывает ее в динамический массив и выводит на экран. У меня проблема) не могу понять откуда...

5
Hikari
Хитрая блондиночка $)
1451 / 960 / 284
Регистрация: 21.12.2015
Сообщений: 3,785
21.06.2016, 18:04 #2
На сколько я знаю в Си матрицы передаются двойным указателем
C
1
func(double **array)
1
CoderHuligan
745 / 456 / 135
Регистрация: 30.06.2015
Сообщений: 2,424
Записей в блоге: 3
21.06.2016, 19:05 #3
Цитата Сообщение от Xadjee Посмотреть сообщение
Как передать в функцию многомерный массив при условии что он уже заранее известен и проинициализирован?
Сделать его глобальным
1
Xadjee
2 / 2 / 0
Регистрация: 19.10.2014
Сообщений: 48
21.06.2016, 19:21  [ТС] #4
Можно на конкретном примере, как мне 3 объявленных матрицы передать в функцию? На примере функции вывода в консоль матриц.
Через указатель на указатель могу только динамические матрицы передавать. Но динамическую матрицу не инициализировать на этапе объявления, придется вручную каждый элемент присваивать. Не вариант.
Сделать глобальными тоже смысла нет, реализация расчетов не будет универсальной.

делал так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
double scalarProduct (double matrix[4][4], int n)
{
    int i,j;
    double min;
    int col = 0, row = 0;
    double sum = 0;
    min = matrix[0][0];
    for (i = 0; i<n; i++)
        for (j = 0; j<n; j++)
            if (matrix[i][j]<min) 
            {
                min = matrix[i][j];
                row = i;
                col = j;
            }
 
    for (i = 0; i<n; i++)
        sum += matrix[col][i] * matrix[i][row];
    return sum;
}
но передать можно только матрицу 4 на 4, для матриц 3 на 3 заводить отдельную надо.
0
Байт
Эксперт C
17715 / 11736 / 1872
Регистрация: 24.12.2010
Сообщений: 23,538
21.06.2016, 19:38 #5
Xadjee, Можно попробовать передавать как одномерные массивы
C
1
2
3
4
5
6
7
8
9
10
f(double *X, int n, int m)
{
  X[i*m + j] - это элемент [i][j]
}
main()
{
    f(&A[0][0], 3, 3);
    f(&B[0][0], 4, 4);
    f(&C[0][0], 3, 3);
}
Добавлено через 3 минуты
Цитата Сообщение от Hikari Посмотреть сообщение
На сколько я знаю в Си матрицы передаются двойным указателем
В данном случае это не катит. Тогда и матрицу надо создавать другим способом, как правильно отметил ТС.

Не по теме:

Цитата Сообщение от CoderHuligan Посмотреть сообщение
Сделать его глобальным
"Фи, лейтенант! Рыбу - ножом?" (старинный анекдот)

2
CoderHuligan
745 / 456 / 135
Регистрация: 30.06.2015
Сообщений: 2,424
Записей в блоге: 3
21.06.2016, 20:22 #6
Цитата Сообщение от Байт Посмотреть сообщение
"Фи, лейтенант! Рыбу - ножом?" (старинный анекдот)

Не по теме:

Это на самый крайняк..



Добавлено через 5 минут
Цитата Сообщение от Xadjee Посмотреть сообщение
Можно на конкретном примере, как мне 3 объявленных матрицы передать в функцию?
Обьявляем так :
C
1
double scalarProduct (double *matrix, int n)
как уже было замечено, вызываем так:
C
1
scalarProduct (*matrix, n)
в функции работаем через разыменование указателей.
0
21.06.2016, 20:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.06.2016, 20:22
Привет! Вот еще темы с ответами:

Передача массива в функцию - C (СИ)
В общем задание такое Превратить этот код в другой код, что-то поменять, я не врубаюсь что и как. Тема называется передача массива в...

Передача массива в функцию - C (СИ)
Здравствуйте, помогите разобраться. Необходимо написать функцию для вывода массива на экран, но тип массива может быть int или double....

Передача массива в функцию - C (СИ)
Помогите пожалуйста, запутался... есть динамический массив: char *str = new char; как я его заполняю.. неважно далее мне нужно...

Передача массива в функцию - C (СИ)
Доброго времени суток! Есть программа #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; #include &lt;math.h&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru