Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Заполнение многомерного массива по ссылке
Форум программистов > Системное программирование > C, С++ и С Builder > Общие вопросы по С и С++
misterio
Вот, вчера методом научного тыка и интуиции написал, заполнение одномерного массива по ссылке :
(с моим 2-ух недельным знанием С.)


Код
void FillMatrix(int *matrix[]);

int main(void)
{
    int *matrix[3];

    FillMatrix(matrix);
    getch();  

    return 0;
}

void FillMatrix(int *matrix[]) //передача массива по ссылке.
{
    register int i;
    
    for (i = 0; i < 3; i++) {
         scanf("%i", matrix+i);
    
    }
}


Дак вот как быть с многомерным массивом?
Dimmuborgir
Код
void FillMatrix(int *matrix[]) //передача массива по ссылке.

Здесь вы передаете указатель на массив, а не ссылку.

shisik
И здесь объявляется не массив целых чисел, а массив указателей на int:
Код
int *matrix[3];
misterio
Эмм...ну значит я неправильно выразился, думаю понятно почему.

Дак вот как замутить многомерный(двухмерный) массив таким споспбом, или аналогичным. Чтобы суть осталась неизменной!

Я так понял правильней надо было написать так?

Код
void fill(int *m);

int main(void)
{
    int i,matrix[3];
    fill(&matrix);

    //проверочка
    for (i = 0; i < 3; i++) {
        printf("%i\n",*(matrix+i));
    }

    return 0;
}
void fill(int *m)
{
    int i;

    for (i = 0; i < 3; i++) {
        scanf("%i", m+i);
    }
}
Dimmuborgir
Код
void fill(double**,int,int);

int main(void)
{
    const int row=3;
    const int col=3;
    double matrix[row][col];

    fill(matrix,row,col);

    return 0;
}
void fill(double**m,int r,int c)
{
    for (int i = 0; i<r; i++)
      for (int j = 0; j<c; j++)
        scanf("'m[%i,%i]=%f",i,j, m[i][j]);
}
shisik
misterio
только не fill(&matrix); а fill(matrix); Имя массива = его адрес, т.е. адрес первого элемента. В данном случае matrix аналогично &matrix[0]
misterio
Цитата
только не fill(&matrix); а fill(matrix); Имя массива = его адрес, т.е. адрес первого элемента. В данном случае matrix аналогично &matrix[0]


Спасибо. Я об этом читал - "...считаеться плохим стилем программирования..", но в силу своей неопытности в С - я думаю мне позволено.
shisik
Цитата(misterio @ 26:05:2008, 17:07 ) *
Спасибо. Я об этом читал - "...считаеться плохим стилем программирования..", но в силу своей неопытности в С - я думаю мне позволено.

Что считается плохим стилем? &matrix в данном случае даже не скомпилируется (по крайней мере gcc ругается), т.к. ты пытаешься взять адрес адреса, что есть бред (это ж не переменная-указатель, адрес массива - константа). Такая запись примерно аналогична &123.
misterio
Цитата
данном случае даже не скомпилируется (по крайней мере gcc ругается)


gcc штука противная- ИМХО.

для начала с меня GodeGear RAD C++ Builder хватает.
Kmet
misterio
со своим билдером вам сюда http://forum.codeby.net/topic23195.html это раз.
не путаем ИДЕ и компилятор это два
misterio
Цитата
со своим билдером вам сюда http://forum.codeby.net/topic23195.html это раз.


Читайте топик внимательней. Вопрос из ряда общих. А в таком тоне и не в тему прошу не писать.

Цитата
не путаем ИДЕ и компилятор это два


Я не путаю. Хотел бы я посмотреть на вас с двухнедельним знанием С.

Прошу топик считать закрытым.
dpi
// Динамический захват и освобождение памяти
CODE

double *a; // Одна переменная
double *d; // Массив переменных
double **dd; // Двухмерный массив

void GetMem()
{ // Захват памяти
a = new double; // Одна переменная
d = new double[4]; // Массив переменных
dd = new double*[3]; // Двухмерный массив
for(int i = 0; i< 3; i++)
dd[i] = new double[2];
// Присвоение
*a = 1.0; // Одна переменная
cout << "a = " << *a << endl;
cout << "Address of a = " << a << endl;

// Массив переменных
cout << "Array starts from " << d << " and has\n";
for(i = 0; i < 4; i++)
{
d[i] = double(i);
cout << "d[" << i << "] = " << d[i] << endl;
}

cout << "2D array starts from " << dd << " and has\n";
for(i = 0; i < 3; i++, cout << endl) // Двухмерный массив
for(int j = 0; j < 2; j++)
{
dd[i][j] = (double)(i + j);
cout << "dd[" << i << "][" << j << "] = " << dd[i][j] << endl;
}
}

void FreeMem()
{ // Освобождение памяти
delete a; // Одна переменная
delete [] d; // Массив переменных
for(int i = 0; i < 3; i++) // Двухмерный массив
delete [] dd[i];
delete [] dd;
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Русская версия IP.Board © 2001-2008 IPS, Inc.