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

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

20.04.2015, 12:35. Показов 405. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть файл из которого необходимо считать размер массива и, собственно, сам массив (поэлементно).
Далее осуществить работу с этим массивом.
Ниже приведен фрагмент кода, который читает исходные данные и выводит их на экран (функция
C
1
read_file()
).
Функция
C
1
print_val_A()
предназначена для отделения считанных элементов массива от файла.
Проблемы указанны в виде комментариев в тексте кода:

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
73
74
75
76
77
78
79
80
81
82
83
int **get_memory_A(int size){
    int **matr_A = (int**)malloc(size*sizeof(int*));
    for (int i = 0; i < size; i++){
        matr_A[i] = (int*)malloc(size*sizeof(int));
    }
    return matr_A;
}
 
void destroy_memory_A(int** matrix_A, int size){
    for (int i = 0; i < size; i++){
        free(matrix_A[i]);
    }
    free(matrix_A);
}
 
int read_file(int **mass, int &size){   // переменной size присвоим значение рамера, считанного из файла (*)
    char fileName[256];
    printf("Введите имя файла: ");
    scanf("%s", fileName);
    printf("введённое имя: %s\n", fileName);
 
    FILE*fo;
    fo = fopen(fileName, "rt");
    if (fo == NULL) {
        perror("Не могу открыть файл: ");
        return 0;
    }
    puts("размерность массива: ");
    fscanf(fo, "%i", &size);       //(*)
    printf("%i\n", size);           //(*)
 
    for (int i = 0; i < size; i++){
        printf("\n");
        for (int j = 0; j < size; j++){
            fscanf(fo, "%i", &mass[i][j]);
            printf("%i \t", mass[i][j]);       //должно выводить элем-ты считанного массива
        }
    }
 
    
    fclose(fo);
    _getch();
    return 0;
}
 
int print_val_A(int **mass, int **matrix_A, int size){
    int i, j;
    for ( i = 0; i < size; i++){
        printf("\n");
        for ( j = 0; j < size; j++);
        {
            matrix_A[i][j] = mass[i][j]; //элементам matrix_A должны присваиваться значения mass(этого не происходит)
            printf("%i \t", matrix_A[i][j]);
        }
    }
    return 0;
}
 
int main(){
    int size = 1;
 
    int mass[11][11] ;
    int **matrix_A;
 
    matrix_A= get_memory_A(size);
    
            read_file(mass, size); здесь подчёркивает mass
            for (int i = 0; i < size; i++){
                printf("\n");
                for (int j = 0; j < size; j++){
                    printf("%i \t", mass[i][j]);   // вот этой строкой выводит элементы mass
                }
            }
            _getch();
 
            print_val_A(mass, matrix_A, size); // и здесь подчёркивает mass
            _getch(); 
        
    destroy_memory_A(matrix_A, size);
 
    _getch();
    return 0;
}
короче, я думаю вся проблема в передаче аргументом функции mass, но ума не приложу как это можно исправить.
динамический массив нормально передаётся, а статический нет.

компилятор выдаёт ошибки:
Ошибка 1 error C2664: "int read_file(int **,int &)": невозможно преобразовать аргумент 1 из "int [11][11]" в "int **"
Ошибка 2 error C2664: "int print_val_A(int **,int **,int)": невозможно преобразовать аргумент 1 из "int [11][11]" в "int **"
3 IntelliSense: аргумент типа "int (*)[11]" несовместим с параметром типа "int **" 9
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.04.2015, 12:35
Ответы с готовыми решениями:

Передача через нетипизированный параметр как динамических, так и статических (разного объёма) массивов
Необходимо написать процедуру, способную выводить двумерные динамические и статические массивы...

Передача динамических массивов в функции
Требования:Программа должна демонстрировать два варианта доступа к элементам массивов во...

Методы сортировки статических и динамических массивов
Наверное, самая тяжёлая работа, с которой пришлось столкнуться... Как это делать? Нужно вариант...

Передача динамических массивов в функции. А точнее отдельных частей
Вопрос до жути простой, но мне не понять. К примеру я хочу передать в функцию отдельно одну строку,...

0
20.04.2015, 12:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2015, 12:35
Помогаю со студенческими работами здесь

Вывести эдементы матрицы с помощью статических и динамических массивов
помогите, пожалуйста, как написать код в с++. Дана матрица размера A * B. Вывести ее элементы в...

Возврат динамических массивов, созданных в функции
Как вернуть больше одного динамического массива созданных в функции в главную программу? Известный...

Конфликт динамических и статических объектов
Здравствуйте, на днях столкнулся с проблемой: при обработке событий динамически созданных объектов...

Отличие динамических и статических контролов
Почему когда я создаю статических контрол с именем допустим 'Name1', то Private Sub Name1_Click()...


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

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

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