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

Создание функции инициализации двумерного массива строк через указатель - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
arfaa
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 27
29.08.2012, 11:54     Создание функции инициализации двумерного массива строк через указатель #1
Здравствуйте,имеется двумерный массив:
C++
1
2
3
in_data_up[0][0]=_T("00");    in_data_up[0][1]=_T("01");     in_data_up[0][2]=_T("02");in_data_up[0][3]=_T("03");in_data_up[0][4]=_T("04");
    in_data_up[1][0]=_T("10");         in_data_up[1][1]=_T("11");        in_data_up[1][2]=_T("12");         in_data_up[1][3]=_T("13");
    in_data_up[2][0]=_T("20");in_data_up[2][1]=_T("21");         in_data_up[2][2]=_T("22");         in_data_up[2][3]=_T("23");
необходимо создать функцию,которая выводила бы этот массив в переменную,типа указатель.
Вот то,что я делал,но видимо неправильно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
LPTSTR **on_data_up()
{
    LPTSTR **in_data_up=new LPTSTR*  [width_matrix];
    for (int i=0;i<height_matrix;i++)
        {
            LPTSTR *in_data_up=new LPTSTR[height_matrix];
 
        }
    in_data_up[0][0]=_T("00");    in_data_up[0][1]=_T("01");     in_data_up[0][2]=_T("02");in_data_up[0][3]=_T("03");in_data_up[0][4]=_T("04");
    in_data_up[1][0]=_T("10");         in_data_up[1][1]=_T("11");        in_data_up[1][2]=_T("12");         in_data_up[1][3]=_T("13");
    in_data_up[2][0]=_T("20");in_data_up[2][1]=_T("21");         in_data_up[2][2]=_T("22");         in_data_up[2][3]=_T("23");
    return in_data_up;
}
В чем ошибка?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
29.08.2012, 12:03     Создание функции инициализации двумерного массива строк через указатель #2
Выглядит отвратительно... Зачем вы присваевате указатель на каждую строку массива одному и тому же первому элементу in_data_up?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
29.08.2012, 12:06     Создание функции инициализации двумерного массива строк через указатель #3
Цитата Сообщение от arfaa Посмотреть сообщение
В чем ошибка?
что пишет компилятор?
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
29.08.2012, 12:09     Создание функции инициализации двумерного массива строк через указатель #4
Цитата Сообщение от arfaa Посмотреть сообщение
for (int i=0;i<height_matrix;i++)
{
LPTSTR *in_data_up=new LPTSTR[height_matrix];

}
надо так
C++
1
2
3
4
5
 for (int i=0;i<height_matrix;i++)
        {
            LPTSTR *in_data_up[i] = new LPTSTR[height_matrix];
 
        }
а вообще перепишите код,а то выглядит просто ужасно
arfaa
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 27
29.08.2012, 12:18  [ТС]     Создание функции инициализации двумерного массива строк через указатель #5
Ошибки не выдает,но используя отладчик программа пошагово доходит до первой in_data_up[0][0]=_T("00") и падает в ступор,дальше уже не делает ни шага...

Я бы переписал код,если бы знал как,поэтому тут и спрашиваю.
Суть в том,что данные приходят из другой функции,но так как я их не знаю,то делаю тестовый прямолинейный вариант.Как именно сделать,чтобы было адекватно?

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
LPTSTR **on_data()
{
    LPTSTR **in_data=new LPTSTR*  [width_matrix];
    for (int i=0;i<width_matrix;i++)
 
        {
           in_data[i]=new LPTSTR[height_matrix];
                   for (int i=0;i<height_matrix;i++) { /*здесь должно быть заполнение массива,но он у меня константный,куда впихнуть?*/}
    
        }
    in_data[0][0]=_T("00");    in_data[0][1]=_T("01");in_data[0][2]=_T("02");in_data[0][3]=_T("03");in_data[0][4]=_T("04");
    in_data[1][0]=_T("10");         in_data[1][1]=_T("11");        in_data[1][2]=_T("12");         in_data[1][3]=_T("13");
    in_data[2][0]=_T("20");in_data[2][1]=_T("21");         in_data[2][2]=_T("22");         in_data[2][3]=_T("23");
    return in_data;
}
Так?
-=ЮрА=-
Заблокирован
Автор FAQ
29.08.2012, 12:37     Создание функции инициализации двумерного массива строк через указатель #6
arfaa, лови
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
36
#include <iostream>
#include <windows.h>
using namespace std;
 
LPTSTR **on_data_up(int height_matrix, int width_matrix);
 
int main()
{
    int i, j;
    int height_matrix = 2;
    int width_matrix  = 3;
    LPTSTR **in_data_up = on_data_up(height_matrix , width_matrix);
    for(i = 0; i < 2; i++)
    {
        for(j = 0; j < 3; j++)
            cout<<in_data_up[i][j]<<" ";
        cout<<endl;
    }
    return 0;
}
 
LPTSTR **on_data_up(int height_matrix, int width_matrix)
{
    int i, j;
    LPTSTR **in_data_up = new LPTSTR *[width_matrix];
    for (i = 0;i < height_matrix; i++)
    {
        in_data_up[i] = new LPTSTR[height_matrix];
        for(j = 0; j < width_matrix; j++)
        {
            in_data_up[i][j] = new char[32];
            sprintf(in_data_up[i][j],"%d%d",i,j);
        }
    }
    return in_data_up;
}
00 01 02
10 11 12
Press any key to continue
Добавлено через 1 минуту
arfaa, вам подсказали не до конца LPTSTR это char * т.е. в цикле по j каждому
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
in_data_up[i][j] = new char[32];
надо ещё выделить память, т.к.
in_data_up - это по сути трехмерный char массив
arfaa
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 27
29.08.2012, 12:47  [ТС]     Создание функции инициализации двумерного массива строк через указатель #7
Юра,спасибо за такой код,но до сих пор не понимаю,чтобы не вручную забивать массив,а взять и вставить уже готовый,представленный мной...каким образом это осуществляется?В каком месте функции?
Не увидел каким образом Вы их подали...(
alexey31415
29.08.2012, 12:56
  #8

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
in_data_up - это по сути трехмерный char массив
вы осторожнее так,а то вдруг человека в замешательство введёте

-=ЮрА=-
Заблокирован
Автор FAQ
29.08.2012, 12:58     Создание функции инициализации двумерного массива строк через указатель #9
Цитата Сообщение от arfaa Посмотреть сообщение
вставить уже готовый,представленный мной...каким образом это осуществляется?
- ваш код плох, потому как вы передаёте в функцию размерность матрицы
Цитата Сообщение от arfaa Посмотреть сообщение
width_matrix
Цитата Сообщение от arfaa Посмотреть сообщение
height_matrix
зато забиваете её элементы предполагая макс размерностью 3х4 -
Цитата Сообщение от arfaa Посмотреть сообщение
in_data_up[2][3]
(а что если передадим матрицу 5х8), при этом как я сказал не выделяете память на i,j элемент.
Вобщем не просите меня править некорректную логику, либо берите мой код который я продумал под любой размер in_data_up, либо не берите - это уже дело ваше личное...
arfaa
0 / 0 / 0
Регистрация: 17.05.2011
Сообщений: 27
29.08.2012, 13:06  [ТС]     Создание функции инициализации двумерного массива строк через указатель #10
Хорошо,в любом случае огромное спасибо вам!
Просто суть такая,что есть еще некая функция,которая передает мне размерность матрицы и ее полный массив.А мне надо делать универсальную,которая как раз принимала бы эти данные.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.08.2012, 14:23     Создание функции инициализации двумерного массива строк через указатель
Еще ссылки по теме:

Создание двумерного динамического массива в функции C++
Функция инициализации двумерного массива нулевыми элементами C++
C++ Ошибка инициализации двумерного массива в классе

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
29.08.2012, 14:23     Создание функции инициализации двумерного массива строк через указатель #11

Не по теме:

Цитата Сообщение от arfaa Посмотреть сообщение
Хорошо,в любом случае огромное спасибо вам!
Просто суть такая,что есть еще некая функция,которая передает мне размерность матрицы и ее полный массив.А мне надо делать универсальную,которая как раз принимала бы эти данные.
- ну так уберите выделение памяти добавьте в функцию парметрами - указатель LPTSTR** и два размера матрицы и вперёд - проблем не вижу...



Добавлено через 6 минут

Не по теме:

короче вот прототип - дорабатывайте под себя...

C++
1
2
3
4
5
6
7
8
9
10
11
12
LPTSTR **on_data_up(LPTSTR **in_data_up, int height_matrix, int width_matrix)
{
    int i, j;
    for (i = 0;i < height_matrix; i++)
    {
        for(j = 0; j < width_matrix; j++)
        {
            in_data_up[i][j];//Что надо то с элементом и делайте
        }
    }
    return in_data_up;
}

Yandex
Объявления
29.08.2012, 14:23     Создание функции инициализации двумерного массива строк через указатель
Ответ Создать тему
Опции темы

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