Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
NEW_NAME
1 / 1 / 0
Регистрация: 04.10.2012
Сообщений: 45
#1

Что происходит когда например "char* g="fdgag";"? - C++

26.11.2012, 21:11. Просмотров 366. Ответов 8
Метки нет (Все метки)

Сабж. Я понял создается динамический массив с помощью malloc() и поэтому к нему не обратится таким образом: g[2]. Я прав?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4929 / 2509 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
26.11.2012, 21:17     Что происходит когда например "char* g="fdgag";"? #2
Цитата Сообщение от NEW_NAME Посмотреть сообщение
создается динамический массив с помощью malloc()
Нет. Создается указатель на константный строковый литерал.
Цитата Сообщение от NEW_NAME Посмотреть сообщение
поэтому к нему не обратится таким образом: g[2]
На чтение можно обращаться.
zss
Модератор
Эксперт С++
 Аватар для zss
6113 / 5716 / 1849
Регистрация: 18.12.2011
Сообщений: 14,606
Завершенные тесты: 1
26.11.2012, 21:20     Что происходит когда например "char* g="fdgag";"? #3
g - указатель на константный текстовый массив.
Читать g[2] можно:
char c=g[2];
Писать - нельзя:
g[2]='a';// ошибка исполнения.
nshell32gmail
5 / 5 / 1
Регистрация: 26.11.2012
Сообщений: 19
26.11.2012, 21:21     Что происходит когда например "char* g="fdgag";"? #4
Вроде нет. Если ты не выделяешь память под массив явно, т.е. не используешь ни malloc(), ни new, то есть два выхода:
1. Если использовать таблицу строк, тогда пишешь так:
const char *arr = "my text";
Это создаст в файле программы в таблице строк строку "my text", свяжет указатель arr на константу по адресу этой строки и ее уже изменять во время выполнения программы, очевидно, будет нельзя нельзя.
2. Иначе выделяешь память для строки явно:
char *arr = new char[7]
или в стиле С
char *arr = (char*)malloc(sizeof(char)*7);
и в обоих случаях используешь strcpy(arr,"string\0");
--
вот как у тебя написано - так делать нельзя, но добросовестный компилятор сделает как в первом случае и выкинет warning, что инфа по указателю может измениться, а там уже непредсказуемые последствия, т.к. все что не запрещено, то разрешено и ты НАВЕРНЯКА рано или поздно захочешь изменить значение по указателю.
NEW_NAME
1 / 1 / 0
Регистрация: 04.10.2012
Сообщений: 45
26.11.2012, 21:38  [ТС]     Что происходит когда например "char* g="fdgag";"? #5
Почему кстати для этой штуки не работает _msize()? Для new char[4] к примеру работает.
BuPy7
Нет ТЗ - давай досвидания
 Аватар для BuPy7
748 / 345 / 30
Регистрация: 01.12.2011
Сообщений: 2,041
26.11.2012, 23:18     Что происходит когда например "char* g="fdgag";"? #6
Цитата Сообщение от NEW_NAME Посмотреть сообщение
создается динамический массив с помощью malloc()
Если вы программируете на C++, то от malloc, calloc, realloc - нужно отказаться. т.к. эти функции наследованные от C. В языке C++, для этих целей, используются функции new и delete.
nshell32gmail
5 / 5 / 1
Регистрация: 26.11.2012
Сообщений: 19
27.11.2012, 01:01     Что происходит когда например "char* g="fdgag";"? #7
Цитата Сообщение от Metallnote Посмотреть сообщение
Если вы программируете на C++, то от malloc, calloc, realloc - нужно отказаться. т.к. эти функции наследованные от C. В языке C++, для этих целей, используются функции new и delete.
Полностью согласен. Если использовать malloc() для класса, то память выделяется, но конструктор не вызывается.
NEW_NAME
1 / 1 / 0
Регистрация: 04.10.2012
Сообщений: 45
27.11.2012, 01:05  [ТС]     Что происходит когда например "char* g="fdgag";"? #8
Цитата Сообщение от Metallnote Посмотреть сообщение
Если вы программируете на C++, то от malloc, calloc, realloc - нужно отказаться. т.к. эти функции наследованные от C. В языке C++, для этих целей, используются функции new и delete.
Блин, да я даже не пользовался никогда этим. Меня интересовал механизм по которому создается такая строка как в шапке темы.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2012, 01:41     Что происходит когда например "char* g="fdgag";"?
Еще ссылки по теме:

Сокращение слов (например, "напряженность"- "напр-ть") C++
Что применить "\n" или "endl"? C++
Что означает конструкция "!!" и "!!!"? C++
Что значит запись char massiv[] = "text" ? C++
C++ Несовместимые типы операндов "char" и "const char*"

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

Или воспользуйтесь поиском по форуму:
nshell32gmail
5 / 5 / 1
Регистрация: 26.11.2012
Сообщений: 19
27.11.2012, 01:41     Что происходит когда например "char* g="fdgag";"? #9
если в ассемблерном коде хоть что понимаешь и gcc есть - запусти с ключом -S. Получишь ассемблерный листинг. Как строка там оказалась - написал выше.
Yandex
Объявления
27.11.2012, 01:41     Что происходит когда например "char* g="fdgag";"?
Ответ Создать тему
Опции темы

Текущее время: 18:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru