Подскажите пожалуйста. Как создать динамически такую конструкцию:
wchar_t *(TempData[2])[500] = new ... или
wchar_t (*TempData[2])[500] = new ...
(массив указателей на 2-х мерный массив строк из 500 элементов, длина строки любая, например 100)
Пробовал:
wchar_t *(TempData[2])[500] = (new wchar_t* [100][2])[500];
и т.п. не выходит.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, hypertonick, Вы писали:
H>(массив указателей на 2-х мерный массив строк из 500 элементов, длина строки любая, например 100)
А что именно нужно, както не очень понятно
typedef рулят
указатель на массив довольно громоздкая конструкция
#include <iostream>
int main()
{ int m[5], (*um)[5]=&m;
(*um)[3] =99;
std::cout << m[3] <<std::endl;
return 0;
}
Здравствуйте, hypertonick, Вы писали:
...
Не совсем понятно что всё-таки нужно. Предположим задача такая: "Создать массив из 500 wide-строк по 100 символов каждая (не больше)"
1. Если есть возможность использовать STL:
#include <vector>
#include <string>
std::vector< std::wstring > strings;
В этом примере создаётся пустой массив строк. В него можно добавлять (метод push_back) строки или создать в нём 500 строк (метод resize). Строки не ограничены в длине (числе символов). Подробности в документации.
2. "Чистый C"
const size_t count=500;
const size_t lenght=100;
// Динамическое создание массива указателей на wchar_t
typedef wchar_t *wchar_t_pointer;
wchar_t **strings=new wchar_t_pointer[count];
// Создание массивов wchar_t (строк)
for (size_t i=0; i<count; ++i)
strings[i]=new wchar_t[lenght];
// Использование
// Например:
// wcscpy(strings[0], L"abcde");
// wcscpy(strings[1], L"123");
// ...
// Не забываем освобождать память!!
for (size_t i=0; i<count; ++i)
delete[] strings[i]; // строки
delete[] strings; // массив строк
3. Обернуть 2 в класс
Решение данного варианта предлагается как домашнее задание
Здравствуйте, hypertonick, Вы писали:
H>Подскажите пожалуйста. Как создать динамически такую конструкцию:
H>H>wchar_t *(TempData[2])[500] = new ... или
H>wchar_t (*TempData[2])[500] = new ...
H>
H>(массив указателей на 2-х мерный массив строк из 500 элементов, длина строки любая, например 100)
H>Пробовал:
H>H>wchar_t *(TempData[2])[500] = (new wchar_t* [100][2])[500];
H>
H> и т.п. не выходит.
int main()
{
wchar_t* (*arr3d)[2][500] = new wchar_t*[100][2][500];
for(int i = 0; i < 100; ++i)
{
wchar_t* (&arr2d)[2][500] = arr3d[i];
for(int j = 0; j < 2; ++j)
{
wchar_t* (&arr1d)[500] = arr2d[j];
for(int k = 0; k < 500; ++k)
arr1d[k] = L"123";
}
}
return 0;
}
Оно?
Спасибо за предложенное решение. Получилось не совсем то, что я хотел: мне нужно
Указатель на масив из 2 указателей, каждый из которых указывает на массив строк(500 строк длиною 100)
Здравствуйте, Bell.
Оно самое -прямо в точку.
Большое спасибо.