Указатели на C, возвращающиеся из функций? - PullRequest
2 голосов
/ 07 ноября 2011

Я пытаюсь создать простую программу умножения матриц на C. Чтобы сделать это, я решил использовать 2 функции: 1 для простого создания матриц и 1 для хранения всех созданных матриц (для выполнения умножения).

Мне наконец-то удалось выяснить, как передать массив из функции (или, точнее, передать указатель на массив из функции), однако я хочу, чтобы нижеприведенная функция matrixWelcome () передавала количество строк.& столбцы массива.Вот где я застрял.

В настоящее время gcc выдает мне сообщение об ошибке: недопустимый аргумент типа 'unary *' для строки -> row = * i;

Мой код:

void matrixWelcome() {
    int selection;
    int a, b, c, d, *rows, *columns;
    int *matrix1[0][0], *matrix2[0][0];

    printf("Welcome to matrix mode\n");
    printf("Please select from the following: \n");
    printf("1 - Matrix multiplication");

    scanf("%d", &selection);

    switch (selection) {
        case 1:
            printf("Selected matrix multiplication...\n");
            printf("Please enter matrix 1\n");

            matrix1[*rows][*columns] = matrixInput(*rows, *columns);
            printf("%d\n", *matrix1[1][1]);
            a = *rows;
            b = *columns;

            printf("****ROWS = %d, COLUMNS = %d", a, b);

           // printf("Matrix 1 has %d rows and %d columns", rows, columns);
            printf("Please enter matrix 2\n");
           // matrix2 = matrixInput();
            break;

        default:
            printf("No input entered\n");
            break;
    }
}

int *matrixInput(int *rows, int *columns) {
    int i, j, x, y;
    int *array_pointer = malloc(5 * sizeof(int)); //grab some memory

    if (array_pointer == NULL) { // check that we have successfully got memory
        return NULL;
    }

    // Number of rows & columns for matrix 1
    printf("Enter number of rows: ");
    scanf("%d", &i);
    printf("\nEnter number of columns: ");
    scanf("%d", &j);

    rows = *i;
    columns = *j;

    // Initialise 2D array to hold values
    int matrix_input[i][j];

    printf("Enter values for matrix, starting at 1,1 and moving across 1st row; then move across 2nd row etc..");

    // loop to store values in matrix
    for (x=0; x<i; x++) {
        for (y=0; y<j; y++) {

            int value_entered;
            scanf("%d", &value_entered);
            matrix_input[x][y] = value_entered; 


        }
    }

    *array_pointer = matrix_input[i][j]; 

    // print out matrix - just to confirm
    printf("You've entered the following matrix: \n");
    for (x=0; x<i; x++) {
        for (y=0; y<j; y++) {
            printf("%4d", matrix_input[x][y]);
        }
        printf("\n");
    }
    return array_pointer;
}

Любая помощь будет оценена.

Ответы [ 2 ]

3 голосов
/ 07 ноября 2011

i является int.Вам не нужно разыменовывать это.Вам нужно разыменовать rows, хотя - *rows = i будет работать просто отлично.Не разыменовывайте при вызове вашей функции.Используйте:

 matrixInput(rows, columns);

, так как вы хотите передать указатели.

2 голосов
/ 07 ноября 2011
int *matrix1[0][0], *matrix2[0][0];

это странно и неправильно (вы не должны объявлять глобальные переменные как массивы с 0 измерениями).

И ваш код не полный. Вы забыли по крайней мере #include <stdio.h>, а также #include <stdlib.h>

И ваш код не компилируется.

Вы должны попытаться скомпилировать со всеми включенными предупреждениями, например, в Linux с GCC с

gcc -Wall -g cud.c -o cud

Я получаю 4 ошибки и более 10 предупреждений.

Не публикуйте код, пока не получите предупреждений и ошибок. Редактируйте и улучшайте свой код, пока все ошибки и предупреждения не исчезнут. Затем отладьте ваш код (с помощью отладчика, например gdb в Linux).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...