Заполнение многомерного массива по ссылке

Тема в разделе "Общие вопросы по С и С++", создана пользователем misterio, 25 май 2008.

  1. misterio

    misterio Гость

    Вот, вчера методом научного тыка и интуиции написал, заполнение одномерного массива по ссылке :
    (с моим 2-ух недельным знанием С.)


    Код (Text):
    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);

    }
    }
    Дак вот как быть с многомерным массивом?
     
  2. Dimmuborgir

    Dimmuborgir Гость

    Код (Text):
    void FillMatrix(int *matrix[]) //передача массива по ссылке.
    Здесь вы передаете указатель на массив, а не ссылку.
     
  3. shisik

    shisik Well-Known Member

    Регистрация:
    26 авг 2007
    Сообщения:
    154
    Симпатии:
    0
    И здесь объявляется не массив целых чисел, а массив указателей на int:
    Код (Text):
    int *matrix[3];
     
  4. misterio

    misterio Гость

    Эмм...ну значит я неправильно выразился, думаю понятно почему.

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

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

    Код (Text):
    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);
    }
    }
     
  5. Dimmuborgir

    Dimmuborgir Гость

    Код (Text):
    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]);
    }
     
  6. shisik

    shisik Well-Known Member

    Регистрация:
    26 авг 2007
    Сообщения:
    154
    Симпатии:
    0
    misterio
    только не fill(&matrix); а fill(matrix); Имя массива = его адрес, т.е. адрес первого элемента. В данном случае matrix аналогично &matrix[0]
     
  7. misterio

    misterio Гость

    Спасибо. Я об этом читал - "...считаеться плохим стилем программирования..", но в силу своей неопытности в С - я думаю мне позволено.
     
  8. shisik

    shisik Well-Known Member

    Регистрация:
    26 авг 2007
    Сообщения:
    154
    Симпатии:
    0
    Что считается плохим стилем? &matrix в данном случае даже не скомпилируется (по крайней мере gcc ругается), т.к. ты пытаешься взять адрес адреса, что есть бред (это ж не переменная-указатель, адрес массива - константа). Такая запись примерно аналогична &123.
     
  9. misterio

    misterio Гость

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

    для начала с меня GodeGear RAD C++ Builder хватает.
     
  10. Kmet

    Kmet Well-Known Member
    Java Team

    Регистрация:
    25 май 2006
    Сообщения:
    1.018
    Симпатии:
    1
  11. misterio

    misterio Гость

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

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

    Прошу топик считать закрытым.
     
  12. dpi

    dpi Гость

    // Динамический захват и освобождение памяти
    [codebox]
    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 = 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 = double(i);
    cout << "d[" << i << "] = " << d << 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[j] = (double)(i + j);
    cout << "dd[" << i << "][" << j << "] = " << dd[j] << endl;
    }
    }

    void FreeMem()
    { // Освобождение памяти
    delete a; // Одна переменная
    delete [] d; // Массив переменных
    for(int i = 0; i < 3; i++) // Двухмерный массив
    delete [] dd;
    delete [] dd;
    }[/codebox]
     
Загрузка...

Поделиться этой страницей