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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
dserp18
10 / 10 / 0
Регистрация: 20.01.2013
Сообщений: 91
Записей в блоге: 4
#1

типы указателей Подбельский - C++

20.07.2013, 22:01. Просмотров 1901. Ответов 32
Метки нет (Все метки)

пример из книжки Подбельского
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream.h>
#include <iomanip.h>
int main(){
   unsigned long L=0x12345678L;
   char *cp = (char *) &L;  
   int *ip = (int *) &L;
   long *lp = (long *) &L;
      cout<<hex;
      cout<<"Address L= "<<&L<<"\n"; 
      cout<<"cp= "<<(void *)cp<<"\t"; 
      cout<<"*cp= "<<(int) *cp<<"\n"; 
      cout<<"ip= "<<(void *)ip<<"\t"; 
      cout<<"*ip= "<< *ip<<"\n"; 
      cout<<"lp= "<<(void *)lp<<"\t"; 
      cout<<"*lp= "<<*lp<<"\n"; 
        }
должно выводиться
*cp=78
*ip=5678
*lp=12345678
но у меня выводится *ip=12345678, хотя указатель типа int должен вроде бы вмещать 2 байта. Тогда в чем же дело?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.07.2013, 22:01     типы указателей Подбельский
Посмотрите здесь:

типы указателей - C++
Помогите понять, что от меня хотят в этом задании: &quot;выбрать данные из памяти с помощью разных типов указателей (float, char)&quot;

Не получается преобразовать типы указателей на функцию - C++
Доброго всем времени суток. Подскажите пожалуйста как сделать есть тип указателя на функцию. typedef void (*pfn_RawMouseOnLeftDown ...

Применение указателей - C++
Доброй ночи. Встретил вот такое выражение в книге и не могу понять что к чему: Distance&amp; dist = *(new Distance); После чего можно...

Присвоение указателей - C++
Здарствуйте. Например я пишу пользовательский контейнер (класс шаблон). Узел будет содержать ключ, данные и т.д. я объявляю ключ...

Преобразование указателей - C++
Выводит дерево вместо адреса int x = 5; int *p; p = &amp;x; cout &lt;&lt; p &lt;&lt; endl; char *p2 =...

Массив указателей - C++
Есть ли аналог нижеуказанной строки в си? Создается массив указателей, необходим для работы с функциями работы с виртуальной памятью...

использование указателей - C++
не знал как тему даже назвать :-class CTest { public: int x; void xpp() { x++; } };

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,364
22.07.2013, 17:00     типы указателей Подбельский #16
Как говорится, открой для себя мир архитектур, отличных от Intel x86, и мир операционных систем, отличных от Windows.....
zer0mail
2330 / 1956 / 192
Регистрация: 03.07.2012
Сообщений: 7,013
Записей в блоге: 1
22.07.2013, 17:53     типы указателей Подбельский #17
Цитата Сообщение от Evg Посмотреть сообщение
В стандарте говорится "1 байт", а не "8 бит"
1. Претензии к Страуструпу (я привел цитату из его книги) или к переводчикам.
2. Жду ссылку, где байт не 8 бит.
Croessmah
Модератор
Эксперт CЭксперт С++
13057 / 7320 / 817
Регистрация: 27.09.2012
Сообщений: 18,066
Записей в блоге: 3
Завершенные тесты: 1
22.07.2013, 18:01     типы указателей Подбельский #18
Цитата Сообщение от zer0mail Посмотреть сообщение
Жду ссылку, где байт не 8 бит.
В гугле 100500 штук! Наверное, можно иногда и самому поискать, если уж сказали что такое бывает и не верится
zer0mail
2330 / 1956 / 192
Регистрация: 03.07.2012
Сообщений: 7,013
Записей в блоге: 1
22.07.2013, 18:10     типы указателей Подбельский #19
3. The fundamental storage unit in the C++ memory model is the byte. A byte is at least large enough to contain
any member of the basic execution character set (2.3) and the eight-bit code units of the Unicode UTF-8
encoding form and is composed of a contiguous sequence of bits, the number of which is implementationdefined
Croessmah
Модератор
Эксперт CЭксперт С++
13057 / 7320 / 817
Регистрация: 27.09.2012
Сообщений: 18,066
Записей в блоге: 3
Завершенные тесты: 1
22.07.2013, 18:18     типы указателей Подбельский #20
zer0mail, даже в википедии есть примеры )))
zer0mail
2330 / 1956 / 192
Регистрация: 03.07.2012
Сообщений: 7,013
Записей в блоге: 1
22.07.2013, 18:25     типы указателей Подбельский #21
Да байт уже давно 8 бит и для тех старых компьютеров (и прочих устройств), у которых минимальная единица хранения была не 8 бит, эту самую единицу сейчас никто "просто" байтом не называет. Для любой памяти сейчас байт = 8 бит (а не 5-6-7-9-...) . Примеры из Википедии - исторические (или дайте ссылку на современные архитектуры, где байт не 8 бит).

Если в магазина указана цена 100 рублей, то это сегодняшних рублей, а не каких-то рублей за последние 100 лет.
Evg
Эксперт CАвтор FAQ
17545 / 5783 / 370
Регистрация: 30.03.2009
Сообщений: 15,930
Записей в блоге: 26
22.07.2013, 18:32     типы указателей Подбельский #22
Цитата Сообщение от zer0mail Посмотреть сообщение
3. The fundamental storage unit in the C++ memory model is the byte. A byte is at least large enough to contain
any member of the basic execution character set (2.3) and the eight-bit code units of the Unicode UTF-8
encoding form and is composed of a contiguous sequence of bits, the number of which is implementationdefined
Как-то ты видимо не дочитал до конца предложения, где написано "and is composed of a contiguous sequence of bits, the number of which is implementation defined"

Добавлено через 4 минуты
Цитата Сообщение от zer0mail Посмотреть сообщение
Примеры из Википедии - исторические
Какое отношение написанное в википедии имеет к тому, что написано в стандарте про размеры базовых типов?

Цитата Сообщение от zer0mail Посмотреть сообщение
(или дайте ссылку на современные архитектуры, где байт не 8 бит)
Neuro NM6403, Multicore. И ещё много других сигнальных процессоров.
Croessmah
Модератор
Эксперт CЭксперт С++
13057 / 7320 / 817
Регистрация: 27.09.2012
Сообщений: 18,066
Записей в блоге: 3
Завершенные тесты: 1
22.07.2013, 18:33     типы указателей Подбельский #23
Цитата Сообщение от zer0mail Посмотреть сообщение
то это сегодняшних рублей
ценность которых может различаться в разных местах, хотя рубли одни и те же
zer0mail
2330 / 1956 / 192
Регистрация: 03.07.2012
Сообщений: 7,013
Записей в блоге: 1
22.07.2013, 18:37     типы указателей Подбельский #24
И что - из конца предложения следует, что char может быть меньше 8 бит (ведь претензии были к цитате из Страуструпа "char не менее 8 бит")?

Цитата Сообщение от Croessmah Посмотреть сообщение
ценность которых может различаться в разных местах, хотя рубли одни и те же
Вот именно - рубли одни и же, я об этом а не о ценности (30 лет назад мегабайт памяти имел совсем другую ценность, но байтов содержал столько же).
Evg
Эксперт CАвтор FAQ
17545 / 5783 / 370
Регистрация: 30.03.2009
Сообщений: 15,930
Записей в блоге: 26
22.07.2013, 19:27     типы указателей Подбельский #25
Цитата Сообщение от zer0mail Посмотреть сообщение
едь претензии были к цитате из Страуструпа "char не менее 8 бит"
Претензии были к тому, что в стандарте размер типов описывается в байтах, а не битах. Я видел компилятор под сигнальный процессор, в котором sizeof(char)=sizeof(short)=sizeof(int)=1 байт, а 1 байт = 32 бита

Цитата Сообщение от zer0mail Посмотреть сообщение
Кроме того, гарантируется, что под char отводится минимум 8 бит,
под short или int — минимум 16 бит, под long — минимум 32 бита
Насколько я знаю, ничего такого стандарт не говорит

Добавлено через 3 минуты
Точнее, стандарт Си такого не говорит. А стандарт Си++ - хз
zer0mail
2330 / 1956 / 192
Регистрация: 03.07.2012
Сообщений: 7,013
Записей в блоге: 1
22.07.2013, 20:25     типы указателей Подбельский #26
Ладно, пусть стандарт Си не говорит. А Страуструп - говорит. В конце концов мне важна истинность его утверждения, а не то, так ли она оформлена в стандарте (и вообще, оформлена ли она как-то).
Evg
Эксперт CАвтор FAQ
17545 / 5783 / 370
Регистрация: 30.03.2009
Сообщений: 15,930
Записей в блоге: 26
22.07.2013, 20:52     типы указателей Подбельский #27
Цитата Сообщение от zer0mail Посмотреть сообщение
А Страуструп - говорит
Если в стандарте Си++ по части размера базовых типов записано то же самое, что и в стандарте Си, значит Страуструп не прав де-юре, хотя с вероятностью 99.99% можно утверждать, что прав де-факто.

Тот факт, что в мире существует множество "кривых" (в понимании "стандартного" программиста) implementation-defined настроек ещё не говорит о том, что нужно заморачиваться и помнить о них. Но тем не менее нужно хотя бы понимать, что такие вещи в природе есть и не утверждать, что дескать размеры типов такие-то. Как минимум потому, что кого-то из начинающих это может ввести в заблуждение
zer0mail
2330 / 1956 / 192
Регистрация: 03.07.2012
Сообщений: 7,013
Записей в блоге: 1
22.07.2013, 21:03     типы указателей Подбельский #28
Согласен - и поэтому считаю, что важнее знать де-факто и не заморачиваться вопросами типа: "а вдруг окажется, что int <16 бит (я же 3 года потратил на доскональное изучение стандарта и знаю, что он этого не запрещает) и тогда моя программа не будет работать?".
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
22.07.2013, 21:06     типы указателей Подбельский #29
Цитата Сообщение от Evg Посмотреть сообщение
Кроме того, гарантируется, что под char отводится минимум 8 бит,
под short или int — минимум 16 бит, под long — минимум 32 бита
Насколько я знаю, ничего такого стандарт не говорит

Добавлено через 3 минуты
Точнее, стандарт Си такого не говорит. А стандарт Си++ - хз
Ещё как говорят. Оба.

C99: 5.2.4.2.1/1 + пункты про значащие биты целых типов

5.2.4.2.1 Sizes of integer types <limits.h>

The values given below <...> shall be equal or greater in magnitude (absolute value) to those shown, with the same sign.

number of bits for smallest object that is not a bit-field (byte)
CHAR_BIT 8

<...>

maximum value for an object of type unsigned int
UINT_MAX 65535 // 216 – 1

<...>

maximum value for an object of type unsigned long int
ULONG_MAX 4294967295 // 232 – 1
C++11: весь 18.3.2 + 18.3.3/2:

(сноски 18.3.2.4/1,4)
Equivalent to CHAR_MIN, SHRT_MIN, FLT_MIN, DBL_MIN, etc

Equivalent to CHAR_MAX, SHRT_MAX, FLT_MAX, DBL_MAX, etc.

<...>

18.3.3 C library

2 The contents are the same as the Standard C library header <limits.h>.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2013, 09:06     типы указателей Подбельский
Еще ссылки по теме:

Использование указателей - C++
Не могли бы вы показать как решить это через указатели. Решение правильное. #include &lt;iostream&gt; #include &lt;cstring&gt; using namespace...

массив указателей - C++
Есть массив указателей: char* arStr = {&quot;BAC&quot;,&quot;ACB&quot;,&quot;QQQ&quot;, &quot;SDF&quot;, &quot;ABC&quot;}; возможно ли, зная только адрес первого элемента массива...

Изучение указателей - C++
Привет, изучаю сейчас по Лафоре указатели, там пример сейчас смотрю, где копируют одну строку в другую. Почему этот код на работает? ...

Вектор указателей - C++
Добрый день) Припустим что у нас есть вектор указателей на что... то, какой размер он будет занимать?) #include &lt;iostream&gt; припустим...

Использование указателей - C++
Здравствуйте, немного не понимаю как правильно использовать указатели, например, я знаю, что при создании указателя на объект класса, можно...


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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
17545 / 5783 / 370
Регистрация: 30.03.2009
Сообщений: 15,930
Записей в блоге: 26
23.07.2013, 09:06     типы указателей Подбельский #30
Цитата Сообщение от OhMyGodSoLong Посмотреть сообщение
maximum value for an object of type unsigned int
UINT_MAX 65535 // 216 – 1
Тебе это не кажется ересью?

Добавлено через 1 минуту
А... дошло. Реально есть-таки минимальные ограничения

Добавлено через 9 часов 35 минут
Опять-таки чисто на всякий случай. Стандарт оперирует понятиями типа "максимальное значение", но не "битовый размер". Казалось бы, одно вытекает из другого. Но это при условии двоичных битов. Бит может иметь и другую размерность. Ранее уже создавались машины, работающие в троичной системе счисления. Сейчас такие навряд ли есть, но кто их знает. Если в светлом будущем схемотехника уйдёт в квантовую область, то так же есть шансы иметь машины с другой размерностью битов. Понятно, что тут уже на грани фантазий, но тем не менее стандарт в этом месте оперирует именно значениями, а не размерами
Yandex
Объявления
23.07.2013, 09:06     типы указателей Подбельский
Ответ Создать тему
Опции темы

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