Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для Fatmarmelad
34 / 10 / 2
Регистрация: 20.02.2016
Сообщений: 1,613

Массив массивов типа char является ли указателем на указатели?

30.11.2018, 16:13. Показов 1109. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Хочу обсудить одну тему.
Есть массив строк- вложенный массив.
C++
1
char arrch[3][6]={"Array","Massiv","Order"};
простой массив можно записать так
C++
1
char*arrch[6]="Array";
Тогда, по идее, можно было бы записать вложеный массив как указатель на указатели. То есть сам массив типа char*. Массивы в массиве тоже типа char*. Значит сам массив должен быть char**.

C++
1
char**arrch[6]=={"Array","Massiv","Order"};// Компилятор выдаёт ошибку
Но такая запись не работает в компиляторе. В моих рассуждениях есть ошибка?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.11.2018, 16:13
Ответы с готовыми решениями:

Добавление в массив типа char * одного элемента типа char
Дан класс Строка, содержащий указатель на char - адрес динамически выделенной для размещения символов строки памяти и длину строки. Нужен...

Динамические массивы. Дан массив записей из полей типа Char, Word, Byte. Преобразовать его в массив типа Longint
FreePascal Выполнить обработку массивов в соответствии с заданием. Предусмотреть описание массивов как динамических. Само задание: Дан...

Сравнение массивов типа Char
У меня есть структура. Мне нужно проверит, (sportsmens.Sport=="swimming"); sportsmens.Sport - массив типа char

10
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
30.11.2018, 16:20
Цитата Сообщение от Fatmarmelad Посмотреть сообщение
Значит сам массив должен быть char**.
Так и есть
Цитата Сообщение от Fatmarmelad Посмотреть сообщение
C++
1
char**arrch[6]=={"Array","Massiv","Order"};// Компилятор выдаёт ошибку
у вас в одной строке ошибок больше чем *здесь должно было быть какое-то умное сравнение, но его здесь нет*
1
 Аватар для Fatmarmelad
34 / 10 / 2
Регистрация: 20.02.2016
Сообщений: 1,613
30.11.2018, 16:24  [ТС]
Цитата Сообщение от Azazel-San Посмотреть сообщение
C++Выделить код
1
char**arrch[6]=={"Array","Massiv","Order"};// Компилятор выдаёт ошибку
Да. Ошибки увидел.

C++
1
char**arrch[3]={"Array","Massiv","Order"};
Может есть ещё ошибки?
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
30.11.2018, 16:28
Fatmarmelad, есть
вот как-то рисовал, для объяснение такое, может не совсем под ваше решение, но как-то так это выглядит
Миниатюры
Массив массивов типа char является ли указателем на указатели?  
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
30.11.2018, 17:02
Цитата Сообщение от Fatmarmelad Посмотреть сообщение
C++
1
char**arrch[3]={"Array","Massiv","Order"};
у вас тут уже как бы char***, я бы начал объяснять, но я думаю лучше вам почитать статейки в интернете о 2D массивах, о выделении под них памяти (если нужно) и тд, думаю там лучше объяснят чем я и со скобками это так не сработает.

Добавлено через 31 минуту
Цитата Сообщение от Fatmarmelad Посмотреть сообщение
Значит сам массив должен быть char**.
Ну и да, тут наверное я вам немножко приврал конечно массив это не тоже что и указатель, массив это массив с выделенной памятю под его элементы и он имеет свой размер, вот как это может выглядеть:
C++
1
2
int arr[10] = {0,1,2,3,4,5,6,7,8,9};
int* p_arr = arr;
Code
1
2
3
4
5
6
7
8
Object           Address         0x00  0x01  0x02  0x03
------           -------         ----------------------
   arr           0x10008000      0x00  0x00  0x00  0x01
                 0x10008004      0x00  0x02  0x00  0x03
                 0x10008008      0x00  0x04  0x00  0x05
                 0x1000800c      0x00  0x06  0x00  0x07
                 0x10008010      0x00  0x08  0x00  0x09
 p_arr           0x10008014      0x10  0x00  0x80  0x00
а указатель просто может указывать на элемент массива, например на 1й. Именно так зачастую в функцию и попадает, 1й элемент, а не весь массив, напр
C++
1
2
3
4
void foo(char[] arr); // тут неявно char*
....
char arr[] = "Hello";
foo(arr); // будет передан первый элемент
Т.е. массив можно представить через указатель и даже заменить, но работать уже с указателями надо иначе чем с массивом напрямую, особенно когда у вас идет ** и ***.
1
 Аватар для Fatmarmelad
34 / 10 / 2
Регистрация: 20.02.2016
Сообщений: 1,613
30.11.2018, 17:22  [ТС]
Azazel-San, я понимаю, что адрес и указатель вещи разные.
Просто интересно, если можно записать массив как указатель (ниже)

C++
1
char*arrch="Array";
то как можно записать массив из нескольких вложенных строк (и вообще многомерные массивы других типов ) через указатель (если это вообще можно)?
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
30.11.2018, 17:31
Fatmarmelad, не совсем лучший пример, но как вариант
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
 
int main()
{
    char** arr2d = new char*[10];
    *arr2d = "Hello";
    *(arr2d + 1) = "world";
    std::cout << *arr2d << " " << *(arr2d + 1);
}
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
30.11.2018, 23:58
Fatmarmelad, Преобразование имени массива в указатель
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.12.2018, 01:04
Цитата Сообщение от Fatmarmelad Посмотреть сообщение
. Значит сам массив должен быть char**.
Fatmarmelad, Вы путаете доступ с сущностью. Массив это тип. Указатель на указатель - тоже тип. И это разные типы. Хотя посредством последнего можно получить доступ к первому (его данным). Это нужно понять и раз и навсегда разделить.
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,218
01.12.2018, 05:24
Цитата Сообщение от Fatmarmelad Посмотреть сообщение
простой массив можно записать так
char*arrch[6]="Array";
Это какая-то белиберда.

Цитата Сообщение от Fatmarmelad Посмотреть сообщение
Тогда, по идее, можно было бы записать вложеный массив как указатель на указатели. То есть сам массив типа char*. Массивы в массиве тоже типа char*. Значит сам массив должен быть char**.
Нет, конечно. Двумерный массив - это массив массивов. Никаких указателей в массивах нет.

Цитата Сообщение от Azazel-San Посмотреть сообщение
Цитата Сообщение от Fatmarmelad Посмотреть сообщение
Значит сам массив должен быть char**.
Так и есть
Нет, конечно. Уж сколько раз разъясняли, разъясняли и разъясняли, но не прививается.

Двумерный массив char[N][M] не имеет ничего общего с char **.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9006 / 4707 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
01.12.2018, 10:30
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Уж сколько раз разъясняли, разъясняли и разъясняли, но не прививается.
TheCalligrapher, это даже к char не относится. Но, к сожалению, указатели и массивы char преподаются сразу когда начинается тема указателей и массивов. Это всё будто задумано для повышения боли и энтропии. А я бы излагал тему оговорив что всё связанное с char будет рассмотрено позже, ввиду отличий указателей и массивов char от всех других типов.
Для новичка такая запись - минус к пониманию, а для преподавателя минус к карме:
C++
1
const char * chara[] = {"a", "b", "cde"};
если тема указателей и массивов только начинается. А вообще, лучше было бы разделить темы указателей и массивов, даже.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.12.2018, 10:30
Помогаю со студенческими работами здесь

Передача в функции массивов типа char - ошибка
Мне нужно передать в функцию 2 массива типа char (не string)и сделать в функции некоторую их обработку. Функция типа void. Но почему-то...

Читать строку типа string из файла, разбить ее на массив слов типа char
Нужно сделать так что бы строчка вида &quot;&lt;слово1&gt;:&lt;слово2&gt;:&lt;слово3&gt;:&lt;слово4&gt;&quot; , считывалась и каждое слово заносилось в свою переменную....

Массив символов char и указатели
В общем нужно сохранить путь к диску в переменную, что бы потом использовать в _findfirst Но сколько бы я не бился над этим, ничего не...

Сформировать массив типа bool из массива типа char
Доброго времени суток! После ввода элементов массива вылазит ошибка &quot;Необработанное исключение: System.NullReferenceException ... &quot;...

Перевести строку типа char в массив типа int
Задание : В текстовом файле INPUT.TXT записаны целые числа через пробел, возможно, в несколько строк. За один просмотр файла сформировать...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru