|
Указатели на строку в С |
|
|
|
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, 11:51
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (psL @ Jan 24 2016, 13:42) * Без K&R обьяснить можете? laughing.gif Могу. Вот Вам УЖЕ был дан ответ: QUOTE Все три выражения в первом случае это есть одно и тоже, поскольку имя переменной это есть ее адрес, то указание взятия адреса есть масло маслянное. Для масивов адрес массива есть адрес его нулевого элемента, посему допронительное указание взять адрес именно нулевого есть уже масло маслянное для масла маслянного. Но, очевидно, что для понимания Вам придется начать с букваря для первого класса и вообще научится читать. После чего уже сможете читать в том числе и K&R и уже подумать и понять что делает операнд '=' и что делает операнд '&' получив адрес обьекта.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 24 2016, 12:46
|
Знающий
   
Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390

|
Цитата(zltigo @ Jan 24 2016, 14:51)  Все три выражения в первом случае это есть одно и тоже, поскольку имя переменной это есть ее адрес, то указание взятия адреса есть масло маслянное. Для масивов адрес массива есть адрес его нулевого элемента, посему допронительное указание взять адрес именно нулевого есть уже масло маслянное для масла маслянного. Но, очевидно, что для понимания Вам придется начать с букваря для первого класса и вообще научится читать... да это какая-то петросянщина маслом масляная. Можете кратко и грамотно безграмотному мне обьяснить? Без букваря, петросяна и тд ? Код char s[]="abc"; void* p1 = s; void* p2 = &s; void* p3 = &p1; Почему равны p1 и p2? Почему не равны p2 и p3? Цитата(amaora @ Jan 24 2016, 15:13)  Выражение "имя массива без индекса" имеет тип указателя на элемент массива, значение соответствует адресу первого члена. Но это не переменная-указатель, собственного адреса у этого выражения нет. В таблице символов компилятора есть только переменная "массив", со своим адресом, а вы хотите получить адрес переменной где хранится указатель на "массив", такого нигде нет. Спасибо. Более-менее понятно.
|
|
|
|
Сообщений в этой теме
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  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 gerber "ABCD" не является rvalue, строго говоря... Jan 24 2016, 14:16 GetSmart Цитата(gerber @ Jan 24 2016, 18:16) ... Jan 24 2016, 14:22  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
|
|
|