|
Указатели на строку в С |
|
|
|
Jan 24 2016, 08:04
|
Знающий
   
Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390

|
В Си есть два способа определения строки: Код char str[] = "string"; void* p1= str; void* p2=&str; void* p3=&str[0];
printf("%p\n%p\n%p\n",p1,p2,p3);
$ a.out 0xbfaa14c5 0xbfaa14c5 0xbfaa14c5
char* str = "string"; void* p1= str; void* p2=&str; void* p3=&str[0];
printf("%p\n%p\n%p\n",p1,p2,p3);
$ a.out 0x80488bc 0xbfc25c78 0x80488bc В первом случае p1 равен p2. Почему так?
|
|
|
|
|
 |
Ответов
|
Jan 24 2016, 14:22
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(gerber @ Jan 24 2016, 18:16)  "ABCD" не является rvalue, строго говоря. Это константа, для которой отведено место в памяти, значит и адрес можно брать, и индекс. А rvalue не видны за пределами выражения, в котором они используются. И сложение rvalue-строк на этапе компиляции отменили? Цитата(krux @ Jan 24 2016, 18:20)  покажите каким образом "ABCD" по-вашему является rvalue, со ссылкой-цитатой на стандарт. Вообще-то очевидно, что оно есть rvalue. А вот когда происходят неявные преобразования это другой вопрос. Оно не может происходить сразу по завершающим кавычкам. По аналогии с массивом, применение индекса к имени массива не вызывает неявное преобразование. Не видно оснований почему к строке оно должно вызывать.
Сообщение отредактировал GetSmart - Jan 24 2016, 14:26
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
Сообщений в этой теме
psL Указатели на строку в С Jan 24 2016, 08:04 amaora В первом случае нет переменных хранящих адрес масс... Jan 24 2016, 10:17 zltigo QUOTE (amaora @ Jan 24 2016, 12:17) В пер... Jan 24 2016, 10:35 Сергей Борщ Цитата(psL @ Jan 24 2016, 10:04) В Си ест... Jan 24 2016, 10:32 psL Цитата(Сергей Борщ @ Jan 24 2016, 13:32) ... Jan 24 2016, 11:26  zltigo QUOTE (psL @ Jan 24 2016, 13:26) Почему у... Jan 24 2016, 11:34   psL Цитата(zltigo @ Jan 24 2016, 14:34) В это... Jan 24 2016, 11:42  SSerge Цитата(psL @ Jan 24 2016, 18:26) чем отли... Jan 24 2016, 11:36  amaora Цитата(psL @ Jan 24 2016, 14:26) разве им... Jan 24 2016, 12:13 _Ivan_33 а почему 2?
а строковый литерал типа
#define MSG ... Jan 24 2016, 11:10 zltigo QUOTE (psL @ Jan 24 2016, 13:42) *
Без K&R обь... Jan 24 2016, 11:51 psL Цитата(zltigo @ Jan 24 2016, 14:51) Все т... Jan 24 2016, 12:46  gerber Цитата(psL @ Jan 24 2016, 15:46) Можете к... Jan 24 2016, 13:03 GetSmart Wow!
Индекс разрешили применять к rvalue?
Цит... Jan 24 2016, 12:54 Сергей Борщ Цитата(GetSmart @ Jan 24 2016, 14:54) Как... Jan 24 2016, 13:11 GetSmart Цитата(Сергей Борщ)Любой выполняющий требования ст... Jan 24 2016, 13:17 zltigo QUOTE (GetSmart @ Jan 24 2016, 15:17) То ... Jan 24 2016, 13:51  GetSmart Цитата(zltigo @ Jan 24 2016, 17:51) Смотр... Jan 24 2016, 14:05   krux Цитата(GetSmart @ Jan 24 2016, 17:05) Кла... Jan 24 2016, 14:20 Сергей Борщ Цитата(GetSmart @ Jan 24 2016, 15:17) То ... Jan 24 2016, 13:55  GetSmart Цитата(Сергей Борщ @ Jan 24 2016, 17:55) ... Jan 24 2016, 17:28   Сергей Борщ Цитата(GetSmart @ Jan 24 2016, 19:28) Кон... Jan 24 2016, 18:45    GetSmart Цитата(Сергей Борщ @ Jan 24 2016, 22:45) ... Jan 25 2016, 03:21     Сергей Борщ Цитата(GetSmart @ Jan 25 2016, 05:21) По ... Jan 25 2016, 07:43      GetSmart Цитата(Сергей Борщ @ Jan 25 2016, 11:43) ... Jan 25 2016, 07:56       Сергей Борщ Цитата(GetSmart @ Jan 25 2016, 09:56) Пре... Jan 25 2016, 08:08        GetSmart Цитата(Сергей Борщ @ Jan 25 2016, 12:08) ... Jan 25 2016, 08:16         Сергей Борщ Цитата(GetSmart @ Jan 25 2016, 10:16) По ... Jan 25 2016, 08:54          GetSmart Цитата(Сергей Борщ @ Jan 25 2016, 12:54) ... Jan 25 2016, 10:01           Сергей Борщ Цитата(GetSmart @ Jan 25 2016, 12:01) ... Jan 25 2016, 10:34            GetSmart Цитата(Сергей Борщ @ Jan 25 2016, 14:34) ... Jan 25 2016, 10:50             CrimsonPig Цитата(GetSmart @ Jan 25 2016, 10:50) Пос... Jan 25 2016, 11:47              Сергей Борщ Цитата(CrimsonPig @ Jan 25 2016, 13:47) А... Jan 25 2016, 12:21               GetSmart Цитата(Сергей Борщ @ Jan 25 2016, 16:21) ... Jan 25 2016, 12:40               GetSmart Цитата(Сергей Борщ @ Jan 25 2016, 16:21) ... Jan 25 2016, 13:08              GetSmart Цитата(CrimsonPig @ Jan 25 2016, 15:47) А... Jan 25 2016, 13:53               zltigo QUOTE (GetSmart @ Jan 25 2016, 15:53) Обс... Jan 25 2016, 14:33  krux Цитата(GetSmart @ Jan 24 2016, 17:22) Цит... Jan 24 2016, 14:23  Сергей Борщ Цитата(GetSmart @ Jan 24 2016, 16:05) В с... Jan 24 2016, 14:43   GetSmart ЦитатаЭто как?
foo2( "ABCD" + "XYZ... Jan 24 2016, 15:02    zltigo QUOTE (GetSmart @ Jan 24 2016, 17:02) foo... Jan 24 2016, 15:24    Сергей Борщ Цитата(GetSmart @ Jan 24 2016, 17:02) foo... Jan 24 2016, 15:28 GetSmart Дополнил конец пред поста. Jan 24 2016, 14:27 krux Цитата(GetSmart @ Jan 24 2016, 17:22) Воо... Jan 24 2016, 14:38 GetSmart Если строки складываются без плюса, то я не сильно... Jan 24 2016, 15:30 zltigo QUOTE (GetSmart @ Jan 24 2016, 17:30) Есл... Jan 24 2016, 15:42 GetSmart Тогда есть отличия с взятием адреса массива через ... Jan 24 2016, 15:55 SSerge Кабы авторы языка С в своё время были так же искус... Jan 25 2016, 08:01 GetSmart Нашёл такую формулировку
ЦитатаA postfix expressio... Jan 25 2016, 12:19 Сергей Борщ Цитата(GetSmart @ Jan 25 2016, 14:19) В э... Jan 25 2016, 12:46  GetSmart Цитата(Сергей Борщ @ Jan 25 2016, 16:46) ... Jan 25 2016, 22:19   Сергей Борщ Цитата(GetSmart @ Jan 26 2016, 00:19) Пиш... Jan 25 2016, 23:06   zltigo QUOTE (GetSmart @ Jan 26 2016, 00:19) Я н... Jan 26 2016, 07:30    GetSmart Цитата(zltigo @ Jan 26 2016, 11:30) Как р... Jan 26 2016, 11:53 zltigo QUOTE (GetSmart @ Jan 25 2016, 14:19) Клю... Jan 25 2016, 13:15  gerber Цитата(zltigo @ Jan 25 2016, 16:15) 1) Я ... Jan 25 2016, 13:19   zltigo QUOTE (gerber @ Jan 25 2016, 15:19) И как... Jan 25 2016, 13:20    gerber Цитата(zltigo @ Jan 25 2016, 16:20) Как и... Jan 25 2016, 13:23     zltigo QUOTE (gerber @ Jan 25 2016, 15:23) Хм ..... Jan 25 2016, 13:27      gerber Цитата(zltigo @ Jan 25 2016, 16:27) Но во... Jan 25 2016, 15:02       zltigo QUOTE (gerber @ Jan 25 2016, 17:02) Как п... Jan 25 2016, 15:39  GetSmart Цитата(zltigo @ Jan 25 2016, 17:15) Это ф... Jan 25 2016, 13:19 gerber Стандарт стандартом, но за работу с элементами мас... Jan 25 2016, 13:12 GetSmart Цитата(Сергей Борщ @ Jan 26 2016, 03:06) ... Jan 25 2016, 23:46 Сергей Борщ Цитата(GetSmart @ Jan 26 2016, 01:46) С к... Jan 26 2016, 00:31  GetSmart Цитата(Сергей Борщ @ Jan 26 2016, 04:31) ... Jan 26 2016, 00:39   Сергей Борщ Цитата(GetSmart @ Jan 26 2016, 02:39) Нап... Jan 26 2016, 08:41 sigmaN Честно прочитал все сообщения. Так и не понял поче... Jan 26 2016, 16:30 Serg76 Цитата(sigmaN @ Jan 26 2016, 19:30) Вроде... Jan 26 2016, 21:16 smalcom Welcome to electronix )) Jan 26 2016, 20:05 GetSmart ЦитатаAn operator is called a Postfix Operator whe... Feb 5 2016, 20:41 sigmaN ЦитатаЕсли ерунда содержится в какой-то части стан... Feb 6 2016, 10:51 krux GetSmart
пока ваш 'компилятор' не может со... Feb 8 2016, 19:06 ar__systems Это тему больно читать....
А когда вы работать ус... Feb 9 2016, 14:24
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|