Форум программистов, компьютерный форум CyberForum.ru

Двумерный массив - ошибка приведения типов - C++

Восстановить пароль Регистрация
 
winnisp
 Аватар для winnisp
0 / 0 / 0
Регистрация: 10.09.2012
Сообщений: 25
21.06.2013, 13:04     Двумерный массив - ошибка приведения типов #1
Приветсвую. Столкнулся с такой проблемой, точнее не с проблемой а с вопросом. допустим:
имеется функция Function;
C++
1
void    Function( double *(points[3]));
Которая что-то делает. Приводить определение не имеет смысла. При вызове ее:
C++
1
2
3
4
int     main(int argc, char **argv)
{
    Function(points);
}
Компилятор естессно ругается : Error 1 error C2664: 'Function' : cannot convert parameter 1 from 'double [20][3]' to 'double **' Массив имеет такой вид: double points[20][3]; В случае выделения под массив динамической памяти, передача его в функцию осуществляется как положено! Это одно из решений. Второе - использование шаблонов.
Объясните пожалуйста, почему с одномерными массивами, при создании его также фиксированным размером и передаче в функцию через указатель проблем не возникает?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
21.06.2013, 13:36     Двумерный массив - ошибка приведения типов #2
@winnisp, ну ясное дело ты хочешь передать динамический массив в болванку функции расчитанной по статический определённого размера. Решить проблему легко - 1е переписать все прототипы функций на динамический вариант передачи массива (короче напальцах везде в параметрах написать double ** array) а статические массивы передавать через спец указатель. Щас накидаю код покажу...
-=ЮрА=-
Заблокирован
Автор FAQ
21.06.2013, 13:44     Двумерный массив - ошибка приведения типов #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вот код для примера
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
using namespace std;
 
void function(int m, int n, double ** arr);
 
int main()
{
    double a[2][3] = 
    {
        {1, 2, 3},
        {4, 5, 6}
    };
 
    double * ptr[2];
    ptr[0] = a[0];
    ptr[1] = a[1];
 
    cout<<"\tINPUT"<<endl;
    cout<<a[0][0]<<" "<<a[0][1]<<" "<<a[0][2]<<endl;
    cout<<a[1][0]<<" "<<a[1][1]<<" "<<a[1][2]<<endl;
 
    function(2, 3, ptr);
 
    cout<<"\tOUTPUT"<<endl;
    cout<<a[0][0]<<" "<<a[0][1]<<" "<<a[0][2]<<endl;
    cout<<a[1][0]<<" "<<a[1][1]<<" "<<a[1][2]<<endl;
    return 0;
}
 
void function(int m, int n, double ** arr)
{
    for(int i = 0; i < m; i++)
    for(int j = 0; j < n; j++)
        arr[i][j] += 2;
}
Миниатюры
Двумерный массив - ошибка приведения типов  
winnisp
 Аватар для winnisp
0 / 0 / 0
Регистрация: 10.09.2012
Сообщений: 25
21.06.2013, 17:01  [ТС]     Двумерный массив - ошибка приведения типов #4
Да, такой вариант я не учел. По сути тоже самое что и создание динамических массивов. Но так я и не уловил в этом ответа на вопрос: "почему с одномерными массивами, при создании его также фиксированным размером и передаче в функцию через указатель проблем не возникает"?
-=ЮрА=-
Заблокирован
Автор FAQ
21.06.2013, 19:00     Двумерный массив - ошибка приведения типов #5
Цитата Сообщение от winnisp Посмотреть сообщение
почему с одномерными массивами, при создании его также фиксированным размером и передаче в функцию через указатель проблем не возникает"?
- тем что в случае одномерного массива передаётся адрес первого элемента, в случае двумерного передаётся массив указателей на строки.
Yandex
Объявления
21.06.2013, 19:00     Двумерный массив - ошибка приведения типов
Ответ Создать тему
Опции темы

Текущее время: 15:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru