31.03.2020, 18:14 [+3 UTC]
в нашей команде: 4 317 чел. | участники онлайн: 9 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.83 (12.03.2020)
JS-v.1.35 | CSS-v.3.37

Общие новости:
28.03.2020, 20:29

Форум:
28.03.2020, 21:05

Последний вопрос:
31.03.2020, 15:56
Всего: 151887

Последний ответ:
31.03.2020, 17:40
Всего: 259908

Последняя рассылка:
31.03.2020, 03:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
19.11.2009, 17:13 »
papaches
Большое спасибо умному эксперту! Все понятно. Выполнил совет и все получилось. С уважением, Юрий Михайлович. [вопрос № 174243, ответ № 256550]
06.01.2012, 00:00 »
Даровко Антон Владимирович
Добрый вечер Дмитрий Сергеевич! Вы очень классно решили задачу, но будут ли у Вас какие-нибудь пояснения к решению данной задачи??? ??? Это очень важно для меня. Напишите пожалуйста подробные пояснения к решению, я Вас очень прошу. Спасибо. [вопрос № 185054, ответ № 269455]
15.08.2017, 16:52 »
solest
Благодарю Вас за ответ и ссылки! [вопрос № 191278, ответ № 275196]

РАЗДЕЛ • С / С++

Создание программ на языках C и C++.

[администратор рассылки: Андрей Кузнецов aka Dr_Andrew (Старший модератор)]

Лучшие эксперты в этом разделе

Коцюрбенко Алексей Владимирович
Статус: Старший модератор
Рейтинг: 1069
solowey
Статус: Специалист
Рейтинг: 522
CradleA
Статус: Профессор
Рейтинг: 374

Перейти к консультации №:
 

Консультация онлайн # 72923
Раздел: • С / С++
Автор вопроса: Platon
Отправлена: 27.01.2007, 21:33
Поступило ответов: 4

Растолкуйте мне пожалуйста суть масива указателей.
Это типа каждый елемент выступает указателем, и с ним можно делать все то-же самое что и с обычним указателем. Но тогда следующий вопрос. Если написать

char *array[]={"a","b","b"};

то тогда что на что будет указывать???????

Состояние: Консультация закрыта

Здравствуйте, Platon!

Вот схема памяти:

array-> array[0] array[1] array[2]
array[0] -> "a"
array[1] -> "b"
array[2] -> "b"

Массив суть указатель на первый элемент последовательности элементов одинакового размера.

Двойные кавычки (") означают указатель на последовательность байтов, оканчивающуюся байтом со значением 0.

Объявление вида
тип_переменной имя_переменной[]
объявляет массив из элементов, тип которых есть тип_переменной
В Вашем случае тип_переменной есть char*, т.е. указатель на char

Для упражнения: осознайте суть объявлений:
а) char** array[]
б) char*** array[]
и т.д.

а) - каждый элемент массива есть указатель на char*, т.е. указатель на указатель на char.
а) - каждый элемент массива есть указатель на char**, т.е. указатель на указатель на указатель на char.

Во всех случаях *array есть первый элемент массива, его тип совпадает с тем, что указано перед array в объявлении.


Консультировал: Neil
Дата отправки: 27.01.2007, 21:46

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Ответ # 139566 от Базанов Иван Александрович

Здравствуйте, Platon!
Тогда array - масив указателей на char из 3х элементов, проинициализированных указанными значениями -"a", "b", "c"
array[0]=="a" типа char*
array[1]=="b" типа char*
array[2]=="b" типа char*
Далее, в зависимости от настроек компилятора, array[1] и array[2] могут указывать на одну область памяти, выделенную под строку "b"
В общем array[i] можно использовать везде где требуется указатель на char


Консультировал: Базанов Иван Александрович
Дата отправки: 27.01.2007, 22:56

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Ответ # 139616 от Thread

Здравствуйте, Platon!
Вы, как и многие из начинающих С++ программистов столкнулись со сложность реализации строк. Видете ли строка в С++ это указатель по сути дела на первый символ этой сторки. Вообще говоря это массив символов по сути дела. Рассмотрим пример.
int *p = new int[3];
Обращаться к элементу можно так: p[index] или так *(p + index)
Как мы видим здесь оператор new выделяет три свободных подряд идущих ячеек и возвращает указатель на первую из них. На самом деле в С++ char - это не символ, это целочисленный тип, отличающийся только своим границами - 0..255, и если мы сделаем
char *p = new char[3];
То тоже будет массив целых чисел. Строка в С++ это массив целых чисел, последним элементом которго является символ '\0' (если мы пишем в апострофах, то это символ), его значение в виде целого числа 0 и называется он символ конца строки.
Вот пример:
char *s = new char[3];
s[0] = 'a';
s[1] = 'b';
s[2] = '\0';
Так мы получили строку "ab".
Тогоже самого можно добиться написав char *s = "ab"; НО здесь разница в том, что элементы этой строки изменять нельзя. Надо помнить что s - это указатель на первый символ. Используя операцию разименовывания вы сами можете в этом убедиться. Т.е.:
char *s = "ab";
char f = *s;
Значение f в этом случае будет равно 'a'.

Вернемся к Вашему примеру. У Вас действительно массив указателей и каждый из указателей указывает на первый символ строки.
array[0] - это указатель на первый символ строки "a" т.е. указатель на первую ячейку массива 'a' '\0' из двух элементов. Если вы передадите этот указатель какой либо функции для работы со строками, то она считывает строку следующим образом: берет указатель array[0], разименовывает, и получает значение первого символа: *array[0]. Далее берется следующий символ: *(array[0] + 1) и так далее пока некоторое значенеи *(array[0] + index) не станет равным '\0', т.е. встретиться конец строки.


Консультировал: Thread
Дата отправки: 28.01.2007, 10:21

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Здравствуйте, Platon!
В записи char *array[]={"a","b","b"};
массив указателей array будет содержать
ТРИ указателя соответственно на строки "a","b","b".
Причем указатели на 2-ю и третью строки будут
разные, хотя эти строки будут содержать одинаковые элементы.
Удачи!


Консультировал: kool
Дата отправки: 28.01.2007, 11:04

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.15144 сек.

© 2001-2020, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.83 от 12.03.2020
Версия JS: 1.35 | Версия CSS: 3.37