Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2009, 08:17   #1
Познающий
Форумчанин
 
Аватар для Познающий
 
Регистрация: 09.05.2009
Сообщений: 162
По умолчанию почему элемент массива char* весит 4 байта?

смешной, пожалуй, вопрос, однако чар ведь вроде весит 1 байт, и уайд чар - два - твердо помню...

А как там получилось что
char *a=new char [4]; //во намудрил ну ладно
cout<<sizeof (a); // выводит 4.

Думал думал так и не понял чего это он так...
Тут не статика, поэтому выводит только сайзоф первого элемента
( char a[10] sizeof (a) равно будет 10, но в данном случае циферка будет 4 хоть 1000 чаров выделяй..)
С наилучшими пожеланиями.
Познающий вне форума Ответить с цитированием
Старый 09.12.2009, 08:45   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Может быть потому что ты не символ обьявил а указатель на массив символов.
А он 4 байта весит.
Внимательнее свой код посмотри у тя там * стоит, а это УКАЗАТЕЛЬ
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.12.2009, 17:11   #3
Познающий
Форумчанин
 
Аватар для Познающий
 
Регистрация: 09.05.2009
Сообщений: 162
По умолчанию

О_о действительно...

сделал так
cout<<sizeof(*(a+2));
выдало 1.

Тогда, получается 4 байта указатель весит изза 8-ми разрядной адресации 16-ти ричной системы чтоль?
С наилучшими пожеланиями.
Познающий вне форума Ответить с цитированием
Старый 09.12.2009, 17:15   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

4-байта это 32 бита. Причем тут 8-разрядная адресация?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.12.2009, 18:37   #5
Познающий
Форумчанин
 
Аватар для Познающий
 
Регистрация: 09.05.2009
Сообщений: 162
По умолчанию

при том что адрес имеет 8 разрядов : 0012FF80 это адрес первой ячейки.
Я просто предположил причину почему ук-ль весит 4 байта.

ЗЫ я конечно понимаю что чем нубнее человек тем абсурднее его предположения XD XD, но раз так то скажите кто-нить истинную причину веса указателя >_<
С наилучшими пожеланиями.

Последний раз редактировалось Познающий; 09.12.2009 в 18:39. Причина: ЗЫ
Познающий вне форума Ответить с цитированием
Старый 09.12.2009, 20:44   #6
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

В Windows семейства x86 используется модель памяти flat. В этой модели любой адрес описывается 32-битным значением(4 байта). Отсюда и теоретический максимум памяти, к которой обращается процесс ограничен 4 гигабайтами. 2^32=4 гигабайта (Практически из-за ограничений ОС не более 2-3-х ГБ). Так вот, указатель - это адрес какой-то переменной или функции в памяти(в данном случае массива), поэтому он и равен 4-м байтам
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 09.12.2009, 21:06   #7
Познающий
Форумчанин
 
Аватар для Познающий
 
Регистрация: 09.05.2009
Сообщений: 162
По умолчанию

Вот!)))) спасибо большое))))
С наилучшими пожеланиями.
Познающий вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему так много весит?! DIMANJ Софт 34 10.08.2012 11:29
помогите, пожалуйста, с удалением массива char в с++! Mira-girl Общие вопросы C/C++ 2 09.11.2009 00:50
Конец числового массива char Байт Общие вопросы C/C++ 4 04.02.2009 21:19
Возвращение массива символов char ActioNs Общие вопросы C/C++ 3 10.01.2009 02:33
Максимальный элемент массива j_Q Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 04.11.2008 22:48