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

Парадокс: значение переменной равно её адресу - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,298
29.09.2009, 13:33     Парадокс: значение переменной равно её адресу #1
Друзья! Вот код, в нём всё понятно.
Выводятся одинаковые значения. Но ведь этого не может быть!
Хотя бы потому не может, что по адресу, который выводится первым, должно находиться значение символа '0'!
Ну, то есть первая и третья строка вывода предсказуемы. Но вторая вообще ни в какие ворота не лезет.
Помогите разобраться, пожалуйста. Спасибо.

C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
int main () {
 char s [5]= {'0','1','2','3','4'};
 
 printf ("eto znachenie peremennoi s  %x\n", s);
 printf ("a eto eo adres! oni pochemu-to ravni    %x\n", &s  );
 printf ("a eto adres nulevogo elementa! %x\n", &s[0]  );
 getchar ();
 return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2009, 13:33     Парадокс: значение переменной равно её адресу
Посмотрите здесь:

Значение, хранящееся по адресу C++
Доступ к переменной по абсолютному адресу. C++
C++ по адресу получить значение
C++ Присвоить значение наименьшего элемента массива переменной М1, номер строки, где находится этот элемент, - переменной Т, номер столбца - переменной С
C++ Напишите структуру switch, которая выполняет следуя действия как что значение переменной grade равно:
Инкремент указателей и как обратиться к "промежуточному" адресу переменной C++
C++ Чему будет равно значение переменной s после выполнения следующего фрагмента программы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
RazorQ
 Аватар для RazorQ
576 / 343 / 9
Регистрация: 06.02.2009
Сообщений: 1,386
29.09.2009, 13:37     Парадокс: значение переменной равно её адресу #2
Цитата Сообщение от kravam Посмотреть сообщение
C++
1
2
printf ("eto znachenie peremennoi s %x\n", s); 
printf ("a eto eo adres! oni pochemu-to ravni %x\n", &s );
А ты, что не знаешь, что s без индекса - это адрес первого элемента.
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
29.09.2009, 13:38     Парадокс: значение переменной равно её адресу #3
Потому что s - это указатель на первый элемент массива, то есть, с нулевым индексом и смещением.

Добавлено через 45 секунд
Цитата Сообщение от kravam Посмотреть сообщение
Но ведь этого не может быть!
это кто тебе такую глупость сказал, что этого не может быть? Я бы сказал, так оно и есть.
R0mm
Псевдо программист
 Аватар для R0mm
192 / 113 / 15
Регистрация: 19.09.2009
Сообщений: 303
29.09.2009, 13:39     Парадокс: значение переменной равно её адресу #4
Все эти значения равны. Учим теорию.
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,298
29.09.2009, 13:44  [ТС]     Парадокс: значение переменной равно её адресу #5
Ну, всё правильно. Вы прочтите пожалуйста, внимательнее. Указатель что содержит? Адрес нулевого элемента. Это всё видно ив первой и в третьей строке.

Но из второй строки следует, что по этому адресу находится САМ указатель, а не нулевой элемент!

Добавлено через 1 минуту
Цитата Сообщение от RazorQ Посмотреть сообщение
А ты, что не знаешь, что s без индекса - это адрес первого элемента.
Знаю. И во второй строке я вывожу адрес (вот адрес &) УКАЗАТЕЛЯ (а вот указатель s, а вот адрес указателя &s) на нулевой элемент, а НЕ адрес нулевого элемента!
Rififi
 Аватар для Rififi
2332 / 1047 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
29.09.2009, 13:47     Парадокс: значение переменной равно её адресу #6
kravam,
адрес начала массива совпадает с адресом его первого элемента. И чё тут такого?
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,298
29.09.2009, 13:53  [ТС]     Парадокс: значение переменной равно её адресу #7
Ничё. Я о другом.
Возьмём 2 переменных. Одну типа char, а вторую типа сhar* И присвоим второй адрес первой.

А теперь скажите, две этих переменных по разным адресам будут находиться или по одинаковым?
R0mm
Псевдо программист
 Аватар для R0mm
192 / 113 / 15
Регистрация: 19.09.2009
Сообщений: 303
29.09.2009, 13:55     Парадокс: значение переменной равно её адресу #8
Цитата Сообщение от kravam Посмотреть сообщение
по разным
Цитата Сообщение от Rififi Посмотреть сообщение
И чё тут такого?
суть изложи вопроса
Rififi
 Аватар для Rififi
2332 / 1047 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
29.09.2009, 14:01     Парадокс: значение переменной равно её адресу #9
kravam,
А теперь скажите, две этих переменных по разным адресам будут находиться или по одинаковым?
По разным, естессно. и дальше что?
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,298
29.09.2009, 14:07  [ТС]     Парадокс: значение переменной равно её адресу #10
Правильно, по разным. Должны, да не обязаны.

В моём случае переменная s[0] что такое? Это переменая типа char. А переменная s что такое? Это на неё указатель. А это значит, что они должны находиться по разным адресам, и Вы это подтверждаете! Так?

А на практике не так!

C++
1
2
 printf ("a eto eo adres! oni pochemu-to ravni    %x\n", &s  );
 printf ("a eto adres nulevogo elementa! %x\n", &s[0]  );
Выводится одит и тот же адрес...
R0mm, Вам всё ещё непонятна суть вопроса?
Rififi
 Аватар для Rififi
2332 / 1047 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
29.09.2009, 14:11     Парадокс: значение переменной равно её адресу #11
kravam,

В моём случае переменная s[0] что такое? Это переменая типа char. А переменная s что такое? Это на неё указатель

Все понятно. Курить 4.2 до просветления. А перед этим - 8.3.4.
R0mm
Псевдо программист
 Аватар для R0mm
192 / 113 / 15
Регистрация: 19.09.2009
Сообщений: 303
29.09.2009, 14:17     Парадокс: значение переменной равно её адресу #12
Цитата Сообщение от kravam Посмотреть сообщение
Вам всё ещё непонятна суть вопроса?
Вот теперь, наконец-таки суть понятна. Думаю над ответом
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,298
29.09.2009, 14:25  [ТС]     Парадокс: значение переменной равно её адресу #13
Rififi,
А мне непонятно, почему Вы решили, что Ваше статус кво позволяет отсылать меня туда, не зная куда. Не хотите помогать- не надо. Без Вас разберусь. Просто с Вами мне было бы легче.

Но как бы то ни было. K&R, глава 5.3 "Указатели и массивы"
"По определению значение переменной или выражения типа "массив" является адресом нулевого элемента массива."

В моём случае s (та самая вышеупомянутая переменная типа массив) содержит адрес нулевого элемента. И, следовательно сам s (или само) не может находиться по этому адресу. А оно находится.
R0mm
Псевдо программист
 Аватар для R0mm
192 / 113 / 15
Регистрация: 19.09.2009
Сообщений: 303
29.09.2009, 14:27     Парадокс: значение переменной равно её адресу #14
Рискну предположить, что по какому-нибудь стандарту Си &s означает тоже адрес первого элемента.
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,298
29.09.2009, 14:35  [ТС]     Парадокс: значение переменной равно её адресу #15
Спасибо за предположение. Если других не будет, останется только с ним и согласиться. То есть согласиться с тем, что s==&s. Ну, да это было бы полбеды. А вот как найти адрес s?
Paulie
Айхрень...
 Аватар для Paulie
306 / 174 / 4
Регистрация: 02.06.2009
Сообщений: 1,078
29.09.2009, 14:54     Парадокс: значение переменной равно её адресу #16
kravam, ну а если уж совсем брутально &&s?
kravam
быдлокодер
 Аватар для kravam
1513 / 873 / 44
Регистрация: 04.06.2008
Сообщений: 5,298
29.09.2009, 14:57  [ТС]     Парадокс: значение переменной равно её адресу #17
Наверное, переменная s имеет две ипостаси.
Что такое s? Адрес нулевого элемента массива.
Но не только. s это ещё и имя массива.

Если пишется s, то имеется ввиду адрес нулевого элемента.
Если пишется &s, то имеется ввиду адрес всего массива. Опять то есть его нулевого элемента.
Больше никак, по-моему.

Хе... Получается s какая-то виртуальная переменная.
Действительно. Собственного адреса не имеет...
Rififi
 Аватар для Rififi
2332 / 1047 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
29.09.2009, 14:57     Парадокс: значение переменной равно её адресу #18
kravam,

мне непонятно, почему Вы решили, что Ваше статус кво позволяет отсылать меня туда, не зная куда

знания стандарта языка, на котором программируешь, не зависят от количества медалек.

Но как бы то ни было. K&R, глава 5.3 "Указатели и массивы"

Не в курсе что там написано, тех-книгами, которые старше моей бабушки как-то не интересуюсь.
Если мне что-то не понятно, я читаю не допотопную литературу, а свежайший стандарт c++. и тебе советую.
GAV_13
81 / 81 / 4
Регистрация: 14.09.2009
Сообщений: 252
29.09.2009, 15:04     Парадокс: значение переменной равно её адресу #19
А не так?:
C++
1
2
3
4
char* p;
p=s;
//p - адрес s
//*p - само s
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.09.2009, 15:05     Парадокс: значение переменной равно её адресу
Еще ссылки по теме:

Чему будет равно значение переменной z после выполнения следующего фрагмента программы? C++
Присвоить переменной К номер элемента массива, равно заданному числу. C++
Поменять значение по указанному адресу в переменной типа std::string C++
Указатель: Получить значение по адресу, указываемому указателем C++
C++ Нюансы использования препроцессора и макросов: чему будет равно значение переменной a?

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

Или воспользуйтесь поиском по форуму:
Paulie
Айхрень...
 Аватар для Paulie
306 / 174 / 4
Регистрация: 02.06.2009
Сообщений: 1,078
29.09.2009, 15:05     Парадокс: значение переменной равно её адресу #20
kravam, а ты дизассемблером его.... и посмотри сократи код до 3х строк, чтобы было проще разобраться. Просто мне сейчас некогда заниматься этим. Работа

Добавлено через 38 секунд
Цитата Сообщение от GAV_13 Посмотреть сообщение
само s
Само s это и ест адрес на первый элемент.
Yandex
Объявления
29.09.2009, 15:05     Парадокс: значение переменной равно её адресу
Ответ Создать тему
Опции темы

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