2013-12-11 4 views
0

Так вот моя проблема:Двумерный массив ОШИБКА: подстрочное значение является ни массивом, ни указатель, ни вектор

Я хотел бы SUM строк в моем массиве в функции.

Здесь (Function):

int* DodWierszy(int j, int *M, int *M1, int *WynikM) 
{ 
    for(i = 0; i < Kolumny; i++) 
    { 
     WynikM[j][i] = M[j][i] + M1[j][i]; 
    } 
    return WynikM; 
} 

И в Main():

for (i = 0; i < Kolumny; i++) 
{ 
    macierzC[i] = DodWierszy(i, macierzA[i], macierzB[i], macierzC[i]); 
} 

И моя ошибка заключается в следующем:

zmpi.c: In function ‘DodWierszy’: 
zmpi.c:13:12: error: subscripted value is neither array nor pointer nor vector 
zmpi.c:13:22: error: subscripted value is neither array nor pointer nor vector 
zmpi.c:13:33: error: subscripted value is neither array nor pointer nor vector 

Я не очень похожи с C. Пожалуйста, помогите мне; <.

+0

массивы M и M1 одиночные измерения массивы, но двойные индексы будут применяться только к двум di массивы растяжения – suspectus

ответ

1

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

Вот что вы делаете неправильно:

  • использовать свой родной язык (код) в многонациональной среде, чтобы вы ограничить число людей, которые могли бы помочь вам так английский пожалуйста
  • DodWierszy не должен возвращать ничего - особенно привести матрицу, которая передается к нему как пары
  • DodWierszy ожидает указатель на Int будет принят, и вы не предоставляете ему
  • вам не нужно передавать строку до DodWierszy - вы можете передать весь массив (т.е. указатель на него - не копия)

Лучше объявлять формальные аргументы (в DodWierszy) в качестве матрицы ИНТ [] [число из перевалы].

int matrixA[2/*rows*/][5/*cols*/] = { { 10, 20, 30, 40, 50}, 
             { 9, 8, 7, 6, 5} }; 

int matrixB[2/*rows*/][5/*cols*/] = { { 1, 2, 3, 4, 5}, 
             { 0, 7, 2, 2, 1} }; 

int matrixC[2/*rows*/][5/*cols*/] = {0}; 

void print_matrix(char label[], int p[][5], int rows, int cols) 
{ 
    printf("%s:\n", label); 

    for(int r = 0; r < rows; r++) 
    { 
     for(int c = 0; c < cols; c++) 
     { 
      printf("%03d ", p[r][c]); 
     } 
     printf("\n"); 
    } 

    printf("\n"); 
} 

void add_matrix_row(int row, int cols, int a[][5], int b[][5], int c[][5]) 
{ 
    for(int col = 0; col < cols; col++) 
    { 
     c[row][col] = a[row][col] + b[row][col]; 
    } 
} 

void main(void) 
{ 
    print_matrix("matrixA", matrixA, 2, 5); 
    print_matrix("matrixB", matrixB, 2, 5); 
    print_matrix("matrixC", matrixC, 2, 5); 

    for (int row = 0; row < 2; row++) 
    { 
     add_matrix_row(row, 5, matrixA, matrixB, matrixC); 
    } 

    print_matrix("matrixA", matrixA, 2, 5); 
    print_matrix("matrixB", matrixB, 2, 5); 
    print_matrix("matrixC", matrixC, 2, 5); 
} 

Результат:

matrixA 
010 020 030 040 050 
009 008 007 006 005 

matrixB: 
001 002 003 004 005 
000 007 002 002 001 

matrixC: 
000 000 000 000 000 
000 000 000 000 000 

matrixA: 
010 020 030 040 050 
009 008 007 006 005 

matrixB: 
001 002 003 004 005 
000 007 002 002 001 

matrixC: 
011 022 033 044 055 
009 015 009 008 006 

Вместо того чтобы передавать весь массив можно передать строку:

for (int row = 0; row < 2; row++) 
{ 
    add_matrix_row(matrixA[row], matrixB[row], matrixC[row]); 
} 

затем

void add_matrix_row(int a[5], int b[5], int c[5]) 
{ 
    for(int col = 0; col < 5; col++) 
    { 
     c[col] = a[col] + b[col]; 
    } 
} 
0

В:

WynikM[j][i] = M[j][i] + M1[j][i]; 

вы обращаетесь, как 2d массив (так называемый матрицей), но, кажется, что вы передаете 1d массивы в вызове функции.

Смежные вопросы