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

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

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

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

20.07.2013, 22:01. Просмотров 1933. Ответов 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 байта. Тогда в чем же дело?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.07.2013, 22:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос типы указателей Подбельский (C++):

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

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

по поводу указателей. Как правильно задавать массив указателей и его удалять? - C++
Т.е., например создаю указатель: TPoint *p_Point=NULL; а если массив? TPoint *p_MassPoint; //=?; как массив обнулить не ясно ...

Почему в сортировке указателей на объекты в вызове функции используются адреса объектов, а не указателей? - C++
Доброго времени суток! Рассматриваю пример (из Лафоре) сортировки массива указателей на объекты, для чего используются указатели на...

Создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей - C++
Задача: создать специфицированный шаблон функции, принимающей массив указателей на char и количество самих указателей. Вернуть адрес...

Объяснить различия в работе указателей на целое число и указателей на const char (строки в стиле Си) - C++
Уважаемые программисты, возникло несколько вопросов касательно указателей. Почему при выводе указателя на int нужна звёздочка (*), а...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,370
22.07.2013, 17:00 #16
Как говорится, открой для себя мир архитектур, отличных от Intel x86, и мир операционных систем, отличных от Windows.....
0
zer0mail
2334 / 1960 / 192
Регистрация: 03.07.2012
Сообщений: 7,033
Записей в блоге: 1
22.07.2013, 17:53 #17
Цитата Сообщение от Evg Посмотреть сообщение
В стандарте говорится "1 байт", а не "8 бит"
1. Претензии к Страуструпу (я привел цитату из его книги) или к переводчикам.
2. Жду ссылку, где байт не 8 бит.
0
Croessmah
Эксперт CЭксперт С++
13238 / 7510 / 847
Регистрация: 27.09.2012
Сообщений: 18,449
Записей в блоге: 3
Завершенные тесты: 1
22.07.2013, 18:01 #18
Цитата Сообщение от zer0mail Посмотреть сообщение
Жду ссылку, где байт не 8 бит.
В гугле 100500 штук! Наверное, можно иногда и самому поискать, если уж сказали что такое бывает и не верится
0
zer0mail
2334 / 1960 / 192
Регистрация: 03.07.2012
Сообщений: 7,033
Записей в блоге: 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
0
Croessmah
Эксперт CЭксперт С++
13238 / 7510 / 847
Регистрация: 27.09.2012
Сообщений: 18,449
Записей в блоге: 3
Завершенные тесты: 1
22.07.2013, 18:18 #20
zer0mail, даже в википедии есть примеры )))
0
zer0mail
2334 / 1960 / 192
Регистрация: 03.07.2012
Сообщений: 7,033
Записей в блоге: 1
22.07.2013, 18:25 #21
Да байт уже давно 8 бит и для тех старых компьютеров (и прочих устройств), у которых минимальная единица хранения была не 8 бит, эту самую единицу сейчас никто "просто" байтом не называет. Для любой памяти сейчас байт = 8 бит (а не 5-6-7-9-...) . Примеры из Википедии - исторические (или дайте ссылку на современные архитектуры, где байт не 8 бит).

Если в магазина указана цена 100 рублей, то это сегодняшних рублей, а не каких-то рублей за последние 100 лет.
0
Evg
Эксперт CАвтор FAQ
17827 / 6037 / 388
Регистрация: 30.03.2009
Сообщений: 16,567
Записей в блоге: 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. И ещё много других сигнальных процессоров.
0
Croessmah
Эксперт CЭксперт С++
13238 / 7510 / 847
Регистрация: 27.09.2012
Сообщений: 18,449
Записей в блоге: 3
Завершенные тесты: 1
22.07.2013, 18:33 #23
Цитата Сообщение от zer0mail Посмотреть сообщение
то это сегодняшних рублей
ценность которых может различаться в разных местах, хотя рубли одни и те же
0
zer0mail
2334 / 1960 / 192
Регистрация: 03.07.2012
Сообщений: 7,033
Записей в блоге: 1
22.07.2013, 18:37 #24
И что - из конца предложения следует, что char может быть меньше 8 бит (ведь претензии были к цитате из Страуструпа "char не менее 8 бит")?

Цитата Сообщение от Croessmah Посмотреть сообщение
ценность которых может различаться в разных местах, хотя рубли одни и те же
Вот именно - рубли одни и же, я об этом а не о ценности (30 лет назад мегабайт памяти имел совсем другую ценность, но байтов содержал столько же).
0
Evg
Эксперт CАвтор FAQ
17827 / 6037 / 388
Регистрация: 30.03.2009
Сообщений: 16,567
Записей в блоге: 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 минуты
Точнее, стандарт Си такого не говорит. А стандарт Си++ - хз
0
zer0mail
2334 / 1960 / 192
Регистрация: 03.07.2012
Сообщений: 7,033
Записей в блоге: 1
22.07.2013, 20:25 #26
Ладно, пусть стандарт Си не говорит. А Страуструп - говорит. В конце концов мне важна истинность его утверждения, а не то, так ли она оформлена в стандарте (и вообще, оформлена ли она как-то).
0
Evg
Эксперт CАвтор FAQ
17827 / 6037 / 388
Регистрация: 30.03.2009
Сообщений: 16,567
Записей в блоге: 26
22.07.2013, 20:52 #27
Цитата Сообщение от zer0mail Посмотреть сообщение
А Страуструп - говорит
Если в стандарте Си++ по части размера базовых типов записано то же самое, что и в стандарте Си, значит Страуструп не прав де-юре, хотя с вероятностью 99.99% можно утверждать, что прав де-факто.

Тот факт, что в мире существует множество "кривых" (в понимании "стандартного" программиста) implementation-defined настроек ещё не говорит о том, что нужно заморачиваться и помнить о них. Но тем не менее нужно хотя бы понимать, что такие вещи в природе есть и не утверждать, что дескать размеры типов такие-то. Как минимум потому, что кого-то из начинающих это может ввести в заблуждение
0
zer0mail
2334 / 1960 / 192
Регистрация: 03.07.2012
Сообщений: 7,033
Записей в блоге: 1
22.07.2013, 21:03 #28
Согласен - и поэтому считаю, что важнее знать де-факто и не заморачиваться вопросами типа: "а вдруг окажется, что int <16 бит (я же 3 года потратил на доскональное изучение стандарта и знаю, что он этого не запрещает) и тогда моя программа не будет работать?".
0
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>.
2
Evg
Эксперт CАвтор FAQ
17827 / 6037 / 388
Регистрация: 30.03.2009
Сообщений: 16,567
Записей в блоге: 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 минут
Опять-таки чисто на всякий случай. Стандарт оперирует понятиями типа "максимальное значение", но не "битовый размер". Казалось бы, одно вытекает из другого. Но это при условии двоичных битов. Бит может иметь и другую размерность. Ранее уже создавались машины, работающие в троичной системе счисления. Сейчас такие навряд ли есть, но кто их знает. Если в светлом будущем схемотехника уйдёт в квантовую область, то так же есть шансы иметь машины с другой размерностью битов. Понятно, что тут уже на грани фантазий, но тем не менее стандарт в этом месте оперирует именно значениями, а не размерами
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2013, 09:06
Привет! Вот еще темы с ответами:

Создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей - C++
Нужно создать специализацию для шаблона, которая принимает массив указателей на строки и количество этих указателей. Эта специализация...

Как обойтись без указателей и указателей на указатель? - C++
Ибо не совсем выходит понять,что на что тут указывает #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdlib.h&gt; using namespace...

Различия указателей char* от указателей других типов - C++
Помогите пожалуйста разобраться! Прочитал раздел про указатели и даже вроде бы понял. Что касается указателей на тип int. Но что...

Создание массивов указателей на массивы указателей - C++
Помогите в решении задачи: создал массив указателей на массивы указателей на строки, но компилятор ругается на то что не может...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.07.2013, 09:06
Ответ Создать тему
Опции темы

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