реклама на сайте
подробности

 
 
> Указатели на строку в С
psL
сообщение Jan 24 2016, 08:04
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 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. Почему так?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zltigo
сообщение Jan 24 2016, 11:51
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
psL
сообщение Jan 24 2016, 12:46
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 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) *
Выражение "имя массива без индекса" имеет тип указателя на элемент массива, значение соответствует адресу первого члена. Но это не переменная-указатель, собственного адреса у этого выражения нет. В таблице символов компилятора есть только переменная "массив", со своим адресом, а вы хотите получить адрес переменной где хранится указатель на "массив", такого нигде нет.

Спасибо. Более-менее понятно.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th August 2025 - 15:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01474 секунд с 7
ELECTRONIX ©2004-2016