Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

29.09.2009, 13:33. Просмотров 1769. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2009, 13:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Парадокс: значение переменной равно её адресу (C++):

Чему равно значение переменной 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);

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

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

как присвоить переменной значение, взятое по определенному адресу? - C++
Собственно у меня есть адрес (например, 010426D8), я знаю, что под этим адресом хранится целочисленное значение, как присвоить переменной...

26
RazorQ
581 / 348 / 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 без индекса - это адрес первого элемента.
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
29.09.2009, 13:38 #3
Потому что s - это указатель на первый элемент массива, то есть, с нулевым индексом и смещением.

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

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

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

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

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

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

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

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

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

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

Присвоить значение наименьшего элемента массива переменной М1, номер строки, где находится этот элемент, - переменной Т, номер столбца - переменной С - C++
Массив С действительных чисел имеет 5 строк и 11 столбцов. Присвоить значение наименьшего элемента массива переменной М1, номер строки, где...

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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