например char str[] = "hello world"; совсем не эквивалентен char* str = "hello world"; в первом случае мы аллоцируем блок из 12 байт прямо в области видимости переменной. а во втором - только указатель, который указывает на блок из сегмента статически инициализированных данных
Комментарии: 18
Tiny
Серьезно что ли?
Cyberzx
и эта разница может критичной в программировании МК. что бы не путаться лучше разделять массивы как таковые и указатели на массивы
Tiny
Прикольно) я не знал Даже если включена опция интернирования строк?
Cyberzx
что такое интернирование строк?
Tiny
Есть такая фишка. Когда анализируется константы строковые, и все одинаковые вхождения строк заменяются одним статическим адресом
Cyberzx
я такой опции не знаю в gcc или clang. но это делается по умолчанию оптимизатором
Tiny
Ну возможно это у меня каша от с#. Там такое точно встречал
Cyberzx
но вообще да. если у тебя массив объявлен, то ты получаешь именно этот блок памяти. с которым можешь делать всё что угодно
Tiny
Ну кстати первый синтаксис мне не нравится. Не очевидно А во втором разве не будет ошибка компилятора? Типо const char* должен быть? Или это уже у меня от с++ деформация?
Cyberzx
в gcc вообще весело с этим если у тебя используются похожие строки в коде, в памяти их вообще может не быть. строки будут скливаться на лету из общих блоков, а разница может модифцироваться арифметическими операциями. ох, как-то я пару дней баг в этом чинил ) в Си тип строкового литерала char*, а в С++ - const char*
Tiny
бля Я знал что с другой язык
Cyberzx
Но при этом модифицировать литерал нельзя. Хоть и есть возможность )
Tiny
Ну да. По моему поинтер на конст это чисто плюсовая фишка Даже если строка будет располагаться в защищённой от записи памяти? Мы сейчас в контексте пк или мк?
Cyberzx
В любом случае этого делать не стоит, что на МК, что на ПК. на ПК можно схватить acceess violation, если сегмент памяти будет read-only. На МК тоже ничем хорошим это не закончится, если строка будет в ROM, а она скорее всего там и будет.
Tiny
Согласен А в какой области работаете?
Cyberzx
gamedev :)
Tiny
Там на сях пишут?
Cyberzx
Пишу сервера для онлайн игр на С++ обычно