| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > масив указателей |
| Автор: grisWall 29.4.2013, 03:00 | ||||||||||
Всем доброго времени суток у меня проблема не могу в С++ инициализировать массив указателей т.е. могу, но вот именно этим способом не получается, кто подскажет что я делаю не так и вообще возможно ли такое:
в консоли ввожу: $ 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 29.4.2013, 07:18 | ||||
строка в кавычках - это const char*. Следовательно,
или, если нужно без const:
static в зависимости от использования можно не писать. |
| Автор: NoviceF 29.4.2013, 13:39 | ||
ну и так, на всякий случай, ты же видишь, что у данного массива получает только 1 элемент, то есть, если нужно сделать массив из нескольких указателей указывающих на строки, должно быть что-то типа
|
| Автор: grisWall 29.4.2013, 23:13 | ||||
а еще смежный вопрос такой
все компилирует вроде бы но при вызове
выдает ошибку сегментирования |
| Автор: volatile 29.4.2013, 23:30 |
grisWall, вы меня извините конечно, но вам нужно читать учебник для самых начинающих. ваш код это - бред. ошибок и бессмыслиц больше чем операторов. |
| Автор: volatile 29.4.2013, 23:54 |
сам массив вообще нельзя ни передать, ни вернуть. можно вернуть указатель, но только если это не стековый объект. так делать нельзя. У вас массив создаецца в стеке. После возврата из функции, стек будет уничтожен (заполнен чем-то другим и т.д.) И указатель будет указывать на неизвестно что. int * mas[] = {1,2,40,21}; // а это, кстати, вообще не имеет смысла. массив указателей на инт, вы заполняете не указателями на инт, а неизвестно чем. grisWall, вам нужно для начала понять что такое массив, что такое указатель, и что такое инт. учебник - да в любом пожалуй это есть. (здесь есть прикрепленная тема по этому поводу). просто нужно понять сначала элементарные вещи. |
| Автор: grisWall 30.4.2013, 01:56 | ||||
да спасибо за совет я откомпилировал и увидел что вместо int* я занес int в int *mas[] теперь я понял и так делать не буду в учебниках этого не пишут там не пишут чего нельзя делать там лишь только то что можно а чего нельзя понимаешь из примеров но порой не достаточно откомпилировать нужно чтоб еще кто-то тебе сказал что это не получается поэтому а это потому что так-то так-то и так-то и тогда появляется знание, когда наделаешь кучу ошибок, извините что я так многословен просто это выражение моей точки зрения по поводу того что мне надо почитать учебники я читал но там не сказано того что мне сказали здесь то что строка в кавычках это const char* например я этого не знал теперь буду знать, а в Си например
работает, а в С++ нет! надо выражение в скобках обязательно в const char* заносить volatile, а как же мне в int * mas[] занести данные не подскажите? |
| Автор: math64 30.4.2013, 07:14 | ||||
Аналогично, как я вам показывал для строк:
static чтобы переменные создавались не на стеке. Если нужно запонять не фиксированными значениями, нужно выделять память по new:
|
| Автор: grisWall 30.4.2013, 11:58 |
| math64, спасибо теперь я понял |