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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
#1

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

29.09.2009, 13:33. Просмотров 1732. Ответов 26
Метки нет (Все метки)

Друзья! Вот код, в нём всё понятно.
Выводятся одинаковые значения. Но ведь этого не может быть!
Хотя бы потому не может, что по адресу, который выводится первым, должно находиться значение символа '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     Парадокс: значение переменной равно её адресу
Посмотрите здесь:

Чему равно значение переменной d? - C++
int a = 5, b = 6, c = 7, d: d = (b ++- ( --c)) + (b + a--);

Поменять значение по указанному адресу в переменной типа std::string - C++
Здравствуйте форумчане. Не получается никак правильно использовать средства С++. Задача такова: Например есть две строки типа...

Нюансы использования препроцессора и макросов: чему будет равно значение переменной a? - C++
Чему будет равно значение переменной a? #define square(x) (x * x) int b = square(2.5); int a = square(2 + b);

Чему будет равно значение переменной z после выполнения следующего фрагмента программы? - C++
Пожалуйста, очень прошу помогите с тестами(( 1)Чему будет равно значение переменной z после выполнения следующего фрагмента программы при...

Чему будет равно значение переменной s после выполнения следующего фрагмента программы - C++
Очень прошу помогите решить!!!! 1) Чему будет равно значение переменной s после выполнения следующего фрагмента программы при...

Напишите структуру switch, которая выполняет следуя действия как что значение переменной grade равно: - C++
Напишите структуру switch, которая выполняет следуя действия как что значение переменной grade равно: &quot;А&quot; то добавить к sum 4; 'В', то...

Доступ к переменной по абсолютному адресу. - C++
Мне нужно обратится к ячейке памяти с известным конкретным адресом (это может быть вектор прерывания, переменная БИОС итд). Как это сделать...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
RazorQ
577 / 344 / 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
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
29.09.2009, 13:38     Парадокс: значение переменной равно её адресу #3
Потому что s - это указатель на первый элемент массива, то есть, с нулевым индексом и смещением.

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

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

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

А теперь скажите, две этих переменных по разным адресам будут находиться или по одинаковым?
R0mm
Псевдо программист
192 / 113 / 15
Регистрация: 19.09.2009
Сообщений: 303
29.09.2009, 13:55     Парадокс: значение переменной равно её адресу #8
Цитата Сообщение от kravam Посмотреть сообщение
по разным
Цитата Сообщение от Rififi Посмотреть сообщение
И чё тут такого?
суть изложи вопроса
Rififi
2359 / 1054 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
29.09.2009, 14:01     Парадокс: значение переменной равно её адресу #9
kravam,
А теперь скажите, две этих переменных по разным адресам будут находиться или по одинаковым?
По разным, естессно. и дальше что?
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
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
2359 / 1054 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
29.09.2009, 14:11     Парадокс: значение переменной равно её адресу #11
kravam,

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

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

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

В моём случае s (та самая вышеупомянутая переменная типа массив) содержит адрес нулевого элемента. И, следовательно сам s (или само) не может находиться по этому адресу. А оно находится.
R0mm
Псевдо программист
192 / 113 / 15
Регистрация: 19.09.2009
Сообщений: 303
29.09.2009, 14:27     Парадокс: значение переменной равно её адресу #14
Рискну предположить, что по какому-нибудь стандарту Си &s означает тоже адрес первого элемента.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.09.2009, 14:35     Парадокс: значение переменной равно её адресу
Еще ссылки по теме:

Присвоить переменной К номер элемента массива, равно заданному числу. - C++
Задан массив целых чисел X, упорядоченный по возрастанию, а также целое число Y. Присвоить переменной К номер того элемента массива Х,...

Значение, хранящееся по адресу - C++
Как узнать адрес, по которому находится значение переменной, я уже знаю. это с помощью = &amp;var А как узнать значение по адресу...

по адресу получить значение - C++
Господа создаю программу которая задаёт значение и показывает адрес ячейке , запускаю её и в другой программе в исходник пишу этот адрес ,...

Инкремент указателей и как обратиться к "промежуточному" адресу переменной - C++
Доброго времени суток! Пусть указатель указывает на адрес переменной типа int. Переменная типа int занимает 4 байта (пускай она...

Указатель: Получить значение по адресу, указываемому указателем - C++
Написать программу, в которой выполнить следующие действия: a) Описать указатели на все известные типы данных; b) Выполнить для каждого...


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

Или воспользуйтесь поиском по форуму:
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
29.09.2009, 14:35  [ТС]     Парадокс: значение переменной равно её адресу #15
Спасибо за предположение. Если других не будет, останется только с ним и согласиться. То есть согласиться с тем, что s==&s. Ну, да это было бы полбеды. А вот как найти адрес s?
Yandex
Объявления
29.09.2009, 14:35     Парадокс: значение переменной равно её адресу
Ответ Создать тему
Опции темы

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