![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
grisWall |
|
||||||||||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 28.4.2013 Репутация: нет Всего: нет |
Всем доброго времени суток у меня проблема не могу в С++ инициализировать массив указателей т.е. могу, но вот именно этим способом не получается, кто подскажет что я делаю не так и вообще возможно ли такое:
в консоли ввожу: $ g++ test.cpp -o test на выводе ошибка test.cpp: В функции «int main()»: test.cpp:7:16: ошибка: array must be initialized with a brace-enclosed initializer char *str[] = "Hello world!"; ^
ввожу: $ g++ test.cpp -o test выдает: test.cpp:6:30: предупреждение: deprecated conversion from string constant to «char*» [-Wwrite-strings] char *str[] = {"Hello world!"}; ^
ввожу: $ g++ test.cpp -o test выдает: test.cpp: В функции «int main()»: test.cpp:7:38: предупреждение: deprecated conversion from string constant to «char*» [-Wwrite-strings] static char *str[] = {"Hello world!"}; ^ везде в примерах видел и в книгах и на форуме что такое возможно, а у меня не получается может кто сталкивался с таким или знает как это решается у меня система Archlinux недавно делал update совсем на днях почти у меня еще много чего не понятного в С++ встречается что например в Си работает и связанно это с указателями и переменными а так же массивами, просто дальше я еще не продвинулся так сказать изучаю поступательно по мере понимания, владения; то чего не знаю пытаюсь изучить, но если даже это не работает, что уж говорить о перегрузке и классах там я вообще захлебнусь мне кажется...или потеряюсь где нибудь так что вообще не выберусь.... страшновато становится..
$ gcc test.c -o test $ ./test Hello world! ----------------------------------- Нормально работает
Ввожу: $ gcc test.cpp -o test на выходе: test.cpp: В функции «int main()»: test.cpp:5:38: предупреждение: deprecated conversion from string constant to «char*» [-Wwrite-strings] static char *str[] = {"Hello world!"}; ^ ///// И снова предупреждение.... Если кто ответит заранее благодарю за помощь... |
||||||||||
|
|||||||||||
math64 |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
строка в кавычках - это const char*. Следовательно,
или, если нужно без const:
static в зависимости от использования можно не писать. |
||||
|
|||||
NoviceF |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 13.3.2012 Где: Ростов-на-Дону Репутация: 2 Всего: 2 |
ну и так, на всякий случай, ты же видишь, что у данного массива получает только 1 элемент, то есть, если нужно сделать массив из нескольких указателей указывающих на строки, должно быть что-то типа
|
|||
|
||||
grisWall |
|
||||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 28.4.2013 Репутация: нет Всего: нет |
а еще смежный вопрос такой
все компилирует вроде бы но при вызове
выдает ошибку сегментирования |
||||
|
|||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
||||
|
||||
grisWall |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 28.4.2013 Репутация: нет Всего: нет |
пусть плохой пример никчемный, но мне понять саму семантику указателей, как они работают через такие вот ошибки а вообще в Си / С++ можно ли передавать массив из функции
а потом в main обращаться к нему
или такое возбраняется может из-за этого у меня ошибка сегментации? Добавлено @ 23:44
а какой учебник вы посоветуете? я читал у меня два один для чайников С++ за 21 день, а другой С/С++ программироние на языке высокого уровня Т.А.Павловской там таких подробностей не описано про указатели там написано как они работают в общих чертах а я пишу не в общих чертах а так как мне нужно чтоб это работало или конечно я смотрю и пограничные случаи что бы знать куда можно идти а куда нельзя....если можете что посоветовать с удовольствием выслушаю ( т.е. сочту)... Это сообщение отредактировал(а) grisWall - 29.4.2013, 23:51 |
||||||
|
|||||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
сам массив вообще нельзя ни передать, ни вернуть. можно вернуть указатель, но только если это не стековый объект. так делать нельзя. У вас массив создаецца в стеке. После возврата из функции, стек будет уничтожен (заполнен чем-то другим и т.д.) И указатель будет указывать на неизвестно что. int * mas[] = {1,2,40,21}; // а это, кстати, вообще не имеет смысла. массив указателей на инт, вы заполняете не указателями на инт, а неизвестно чем. grisWall, вам нужно для начала понять что такое массив, что такое указатель, и что такое инт. учебник - да в любом пожалуй это есть. (здесь есть прикрепленная тема по этому поводу). просто нужно понять сначала элементарные вещи. |
|||
|
||||
grisWall |
|
||||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 28.4.2013 Репутация: нет Всего: нет |
да спасибо за совет я откомпилировал и увидел что вместо int* я занес int в int *mas[] теперь я понял и так делать не буду в учебниках этого не пишут там не пишут чего нельзя делать там лишь только то что можно а чего нельзя понимаешь из примеров но порой не достаточно откомпилировать нужно чтоб еще кто-то тебе сказал что это не получается поэтому а это потому что так-то так-то и так-то и тогда появляется знание, когда наделаешь кучу ошибок, извините что я так многословен просто это выражение моей точки зрения по поводу того что мне надо почитать учебники я читал но там не сказано того что мне сказали здесь то что строка в кавычках это const char* например я этого не знал теперь буду знать, а в Си например
работает, а в С++ нет! надо выражение в скобках обязательно в const char* заносить volatile, а как же мне в int * mas[] занести данные не подскажите? Это сообщение отредактировал(а) grisWall - 30.4.2013, 02:07 |
||||
|
|||||
math64 |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Аналогично, как я вам показывал для строк:
static чтобы переменные создавались не на стеке. Если нужно запонять не фиксированными значениями, нужно выделять память по new:
Это сообщение отредактировал(а) math64 - 30.4.2013, 07:15 |
||||
|
|||||
grisWall |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 28.4.2013 Репутация: нет Всего: нет |
math64, спасибо теперь я понял
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |