0 / 0 / 0
Регистрация: 25.10.2016
Сообщений: 18
1

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

30.10.2016, 15:23. Показов 1299. Ответов 5
Метки нет (Все метки)

Мне нужно передать массив в функцию, а затем из этой функции в другую функцию.
Вот код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#define _CRT_SECURE_NO_WARNINGS
#define _CRT_NONSTDC_NO_WARNINGS
 
#include <stdio.h>
#include <conio.h>
#include <locale>
 
int *generatem(int m[]) {
    srand(time(NULL));
    for (int i = 0; i < 10; i++) {
        m[i] = rand() % 32;
    }
    return m;
}
void printm(int m[]) {
    for (int i = 0; i < 10;i++) {
        printf("%d\n", m[i]);
    }
}
int generatemm(int m[][10]) {
    srand(time(NULL));
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            m[i][j] = rand() % 32;
        }
    }
    return m[10][10];
}
void printmm(int m[10][10]) {
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            printf("%d ", m[i][j]);
        }
        printf("\n");
    }
}
void a() {
    int m[10];
    printm(generatem(m));
}
void b() {
    int m[10][10];
    printmm(generatemm(m));
}
 
int main() {
    setlocale(LC_ALL, "Russian");
    printf("Задание а или б: ");
    char c = getchar();
    if (c == 'a' | c == 'а') {
        a();
    }
    else if (c == 'b' | c == 'б') {
        b();
    }
    else if (c != 'a' | c != 'b' | c != 'а' | c != 'б') {
        printf("\nerror");
        getch();
    }
    getch();
}
В этой строчке ошибка, помогите исправить:
C
1
printmm(generatemm(m));
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.10.2016, 15:23
Ответы с готовыми решениями:

Передача двумерного массива в функции
Здравствуйте. В c++ недавно. Компилятор ругается. Как правильно передать двумерный массив в...

Передача функции статического двумерного массива
Доброго времени суток, уважаемые жители Cyber-Forum. Не так давно я начал самостоятельно изучать...

Передача двумерного массива из функции в функцию
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; const int n=10; void...

Передача элементов двумерного массива в параметры функции
Подскажите. Есть к примеру матрица int mat4; и ее нужно передать в параметры функции. Как это...

5
0 / 0 / 1
Регистрация: 07.09.2015
Сообщений: 162
30.10.2016, 18:16 2
Когда массив используется в качестве аргумента функции, передается только адрес массива, а не копия всего массива. При вызове функции с именем массива в функцию передается указатель на первый элемент массива. (Надо помнить, что в С имена массивов без индекса - это указатели на первый элемент массива.) Параметр должен иметь тип, совместимый с указателем. Имеется три способа объявления параметра, предназначенного для получения указателя на массив. Во-первых, он может быть объявлен как массив, как показано ниже:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
void display(int num[10]);
int main (void) /* вывод чисел */
{
int  t [10], i;
for (i=0; i<10; ++i) t[i]=i;
display(t);
return 0;
}
 
void display(int num[10])
{
int i;
for (i=0; i<10; i++) printf ("%d", num[i]);
}
0
0 / 0 / 0
Регистрация: 25.10.2016
Сообщений: 18
30.10.2016, 20:16  [ТС] 3
Цитата Сообщение от exirtt Посмотреть сообщение
Когда массив используется в качестве аргумента функции, передается только адрес массива, а не копия всего массива.
Я в принципе знаю эту теорию. Мне нужно работать с двумерным массивом. Пожалуйста исправьте функцию generatemm или printmm
0
"C with Classes"
1610 / 1383 / 518
Регистрация: 16.08.2014
Сообщений: 5,752
Записей в блоге: 1
30.10.2016, 20:59 4
Лучший ответ Сообщение было отмечено Keyrillanskiy как решение

Решение

Keyrillanskiy,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#define _CRT_SECURE_NO_WARNINGS
#define _CRT_NONSTDC_NO_WARNINGS
 
#include <stdio.h>
#include <conio.h>
#include <locale>
 
int *generatem(int m[]) {
    srand(time(NULL));
    for (int i = 0; i < 10; i++) {
        m[i] = rand() % 32;
    }
    return m;
}
void printm(int m[]) {
    for (int i = 0; i < 10;i++) {
        printf("%d\n", m[i]);
    }
}
int** generatemm(int** m) {
    srand(time(NULL));
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            m[i][j] = rand() % 32;
        }
    }
 
    return m;
}
void printmm(int** m) {
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            printf("%d ", m[i][j]);
        }
        printf("\n");
    }
}
void a() {
    int m[10];
    printm(generatem(m));
}
void b() {
    int** m;
 
    m = new int*[10];
    for (int i = 0; i < 10; i++)
        m[i] = new int[10];
 
    printmm(generatemm(m) );
 
    for (int i = 0; i < 10; i++)
        delete[] m[i];
 
    delete[] m;
}
 
int main() {
    setlocale(LC_ALL, "Russian");
    printf("Задание а или б: ");
    char c = getchar();
    if (c == 'a' | c == 'а') {
        a();
    }
    else if (c == 'b' | c == 'б') {
        b();
    }
    else if (c != 'a' | c != 'b' | c != 'а' | c != 'б') {
        printf("\nerror");
        getch();
    }
    getch();
}
хз как это сделать, вот только на динамической памяти получилось.
1
0 / 0 / 0
Регистрация: 25.10.2016
Сообщений: 18
31.10.2016, 09:51  [ТС] 5
Цитата Сообщение от _stanislav Посмотреть сообщение
хз как это сделать, вот только на динамической памяти получилось.
Спасибо, работает. Но не могли бы вы пояснить ваш код, или дать статейку, чтобы разобраться?
0
"C with Classes"
1610 / 1383 / 518
Регистрация: 16.08.2014
Сообщений: 5,752
Записей в блоге: 1
31.10.2016, 16:37 6
Keyrillanskiy, загугли - выделение памяти под двумерный массив с++

Добавлено через 6 минут
Keyrillanskiy, вот вроде бы неплохая статься http://itedu.ru/faq/kak-pereda... massiv-v-c
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.10.2016, 16:37
Помогаю со студенческими работами здесь

Передача двумерного массива типа String в функции
Здравствуйте! Изучаю SFML, в уроке весь код находиться в одном cpp файле, я решил разнести все как...

Передача двумерного массива в качестве аргумента функции
Подскажите пожалуйста что не так? (Подчёркивает вот тут вот index(A); аргумент функции). Объясните...

Возможна ли передача двумерного массива в качестве аргумента функции по ссылке
Нужно передать двумерный массив в функцию. Понятно, что можно сделать так: void...

Передача двумерного массива указателей на char в качестве параметра функции
Есть массив char *result2; Нужно передать его в функцию void defDouble(???) в качестве одного из...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru