Изменить значения на массиве массивов (матрица) с функцией, на языке C - PullRequest
0 голосов
/ 16 марта 2012

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

В моем основном у меня было:

int p[20][21];
FILE *f;
f=fopen("intro.txt","rt");

m=0;
n=0;

while( ( c=getc(f) ) != EOF ) 
{
    if(c==' ')
    {
        p[m][n]=0;
        n++;
    }
    else if(c=='^')
    {
        pa[m][n]=5;
        n++;
    }
    else if(c=='*')
    {
        p[m][n]=1;
        n++;
    }
    else if(c=='#')
    { 
        p[m][n]=-1;
        m++;
        n=0;
    }
}

Этот блок кода создает мою матрицу, согласно моему текстовому файлу.В моем проекте это этап инициализации матрицы, который будет использоваться после.

После того, как моя матрица создана, мне нужно изменить некоторые значения в различных позициях в моей матрице, например:

p1m=0;
p1n=0;

p2m=19;
p2n=20;

p[p1m][p1n]=5;
p[p2m][p2n]=5;

Но мне нужно сделать это внутри функции, передать мою матрицу в функцию и изменить мою матрицу в моей основной.

Я попытался установить параметр в функции следующим образом:

void myfunc(int* p[20][21])   

и доступ к нему в основном как:

(myfunc &p[20][21])

Или

void myfunc(int** p[20][21])

Но я полагаю, что я делаю это неправильно.

Ответы [ 2 ]

2 голосов
/ 16 марта 2012

Скажите это:

void myfunc(int p[20][21])
{
    p[2][3] = 8;  // for example
}

Использование:

int main()
{
    int p[20][21];
    myfunc(p);
    return p[2][3];
}
0 голосов
/ 16 марта 2012

Как указывает Керрек, вы можете просто передать имя массива само по себе.Не отличается от обычного массива.

Когда вы компилируете, внизу в кишке, массиву 'p' присваивается адрес, и где бы ни вызывался p, он использует этот адрес.Это вроде как указатель.Поэтому, если вы хотите покопаться в массиве внутри функции, даже в 2D-массиве, вы можете просто вызвать:

int myArray[x];
int my2DArray[x][y];
myfunc(myArray, my2DArray);

Функция получает два адреса, и функция должна знать, какправильно взаимодействовать с данными за ними.

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