С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.88
Zeth
0 / 0 / 0
Регистрация: 05.11.2010
Сообщений: 12
#1

Создание массива по Указателю на массив - C++

05.11.2010, 23:03. Просмотров 3391. Ответов 10
Метки нет (Все метки)

(к сведенью. пользую C++, версия Dev C++ 4.9.9.2)
Я создал указатель на массив:
char (*e)[3];
Мне нужно создать по этому указателю массив с помощью new.
Подскажите как это сделать.

P.s. Знаю что имя массива это указатель на него, и что это изврат. Но этого требует лабораторная.

Огромное спасибо за помощь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2010, 23:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создание массива по Указателю на массив (C++):

Создание объекта произвольного класса по указателю на базовый класс - C++
Есть некий абстрактный базовый класс . Мы знаем , что от этого базового класса будет образовано несколько конкретных производных классов...

Массив по указателю void* - C++
Как сравнивать элементы массива имея указатель void* на него, размер массива и размер в байтах одного элемента?

Обход массива по указателю - C++
Доброго времени суток. К примеру, у меня есть такой код: #include <iostream> using namespace std; int main() { int mass; ...

Размер массива по указателю - C++
Не уверен, что всё правильно понимаю... Про "new" пишут, что оно выделяет необходимое количество памяти и возвращает указатель на начало...

Получение массива по указателю - C++
Привет, возникла сложность с пониманием как работают указатели, привожу код test(unsigned char testar) { const unsigned char...

Определить размер массива по указателю - C++
Собственно вопрос в следующем: можно ли определить размер выделенного динамически массива по указателю на область памяти? int *ptr =...

10
RUSya82
237 / 115 / 3
Регистрация: 15.10.2010
Сообщений: 395
05.11.2010, 23:07 #2
char *e;
e = new char [100];
1
Zeth
0 / 0 / 0
Регистрация: 05.11.2010
Сообщений: 12
05.11.2010, 23:09  [ТС] #3
Это создание обычного указателя и создание по нему массива).
А мне нужно именно создать массив по Указателю на массив, который и задан как указатель на массив.
Спасибо за отклик.
0
RUSya82
237 / 115 / 3
Регистрация: 15.10.2010
Сообщений: 395
05.11.2010, 23:14 #4
Тут маленько другое. Вы создаетте динамический массив. И если при объявлении обычного массива, его размер дожен быть константой. То размером динамического массива может быть переменная. Например, вы сначала можете запросить у пользователя размер массива(или количество записей).
А потом создать массив, с нужным размером.

Добавлено через 1 минуту
Это и есть создание массива. Вы сначала создаете указатель типа char. А потом создаете массив из динамической памяти, указатель указывает на первый (если угодно нулевой) элемент массива
1
Zeth
0 / 0 / 0
Регистрация: 05.11.2010
Сообщений: 12
05.11.2010, 23:21  [ТС] #5
Ахх... Огромное вам спасибо). Я не правильно читал задание лабораторной и пытался сделать непонятно что.
0
RUSya82
237 / 115 / 3
Регистрация: 15.10.2010
Сообщений: 395
05.11.2010, 23:25 #6
Не забудь добавить delete [] e; в конце программы. Освободите динамическую память. А char (*e)[3]; - если не ошибаюсь - объявление массива указателей.
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
06.11.2010, 02:50 #7
Цитата Сообщение от RUSya82
А char (*e)[3]; - если не ошибаюсь - объявление массива указателей.
это указатель на массив из трёх элементов символьного типа

массив указателей - это char *e[3];

C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main(void)
{
    char (*e)[3];
    char a[3] = { 0 };
 
    e = &a;
 
    printf("%d" "\n", (*e)[0]);
    
    return 0;
}
если сделать (*e)[0] - будет переход к массиву a и взятие значения нулевого элемента массива a
если сделать *e[0] - будет взятие нулевого элемента массива e (это массив a) и взятие значения нулевого элемента массива a
то есть они совпадут, но первое яснее
1
RUSya82
237 / 115 / 3
Регистрация: 15.10.2010
Сообщений: 395
06.11.2010, 05:16 #8
Не проще ли объявить указатель типа char, присвоить ему адрес 0-го элемента массива, и в дальнейшем обращаться с ним как с обычным массивом.
0
accept
4828 / 3249 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
06.11.2010, 05:26 #9
Но этого требует лабораторная.
кстати, это не одно и то же

e++ выполнит переход на следующий массив из трёх элементов, тогда как p++, где p - просто указатель на нулевой элемент массива, выполнит переход на следующий элемент (на следующий символ)

Добавлено через 2 минуты
C
1
2
3
4
    char arr[10][3];
    char (*e)[3] = &arr[0];
 
    /* e++ перейдёт с arr[0] на arr[1] */
1
RUSya82
237 / 115 / 3
Регистрация: 15.10.2010
Сообщений: 395
06.11.2010, 09:30 #10
Эт момент я как то упустил. Спасибо.
0
Zeth
0 / 0 / 0
Регистрация: 05.11.2010
Сообщений: 12
06.11.2010, 12:00  [ТС] #11
Спасибо за разные варианты). Я упустил лекцию по этой теме и все это мне пригодится.
0
06.11.2010, 12:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2010, 12:00
Привет! Вот еще темы с ответами:

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

Двумерный массив указателей присвоить другому указателю - C++
char *tp = { &quot;bb&quot;, &quot;vv&quot;, &quot;zz&quot;, &quot;kk&quot;, &quot;&quot; }; char ***mp = tp; // вот здесь ошибка что нужно прописать чтоб...

Определить размерность массива по указателю на него - C++
Дано: template&lt; typename T &gt; void info( T * x ) и int a; info( a ); int b; info( b ); int c; info( c ); int...

Присвоить Указателю адрес из массива Char - C++
Например есть такой код: #include &lt;iostream&gt; using namespace std; int main() { int a = 123456789; int *sa =...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.