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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.08.2015, 20:38   #1
MrQuestion
Пользователь
 
Регистрация: 16.08.2015
Сообщений: 40
По умолчанию Размер символьной переменной и размер указателя на символьную переменную

Код:
#include <iostream>
using namespace std;

int main()
{
    char name;
    cin >> name;
    char* pname = new char;
    cin >> pname;
    
    cout << *pname << endl;
    cout << pname << endl;
    cout << &pname << endl;
    cout << sizeof pname << endl;
    
    cout << name << endl;
    cout << sizeof name << endl;
     
 
    system("pause");
    return 0;
}
Здравствуйте. Вопросы такие:
1) sizeof говорит, что pname == 4, а name == 1. Почему pname так же не занимает в памяти 1?
2) Символьная переменная name, при вводе в неё не символ, а слово (скажем David) при выводе на экране отображает лишь букву D. Разыменованный указатель *pname так же отображает лишь D. Но pname отображает всего David`а. Почему?
Спасибо.

Последний раз редактировалось MrQuestion; 29.08.2015 в 20:40.
MrQuestion вне форума Ответить с цитированием
Старый 29.08.2015, 20:52   #2
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

Указатель - это 32/64-битное целое число, которое указывает на адрес начала блока данных в памяти.... если бы у твоего компа было максимум 256 байт памяти, то и указатель занимал 1 байт (0..255)
Char - это один символ....... для хранения текста, нужно либо статический массив символов (char name[64]), либо динамически выделять тот же массив через new или др. средства
есть класс string, который уже в себе содержит код по созданию и управлению массивом символом
Цитата:
Но pname отображает всего David`а. Почему?
а это уже ошибка, хоть и кажется верным :-) если бы мы сразу после name хранили некую переменную Х, то она бы испортилась и содержала "avid"... а если бы после name, каким-то чудом, попал логин, например, то его бы мы затёрли и это была бы разновидность атаки "переполнение буфера"..... кроме того, система считает что name хранит один символ, поэтому последующие байты она может либо не очистить в конце работы, либо отдать их другой совсем переменной, что приведёт, опять же, к ошибкам

Последний раз редактировалось GreenWizard; 29.08.2015 в 21:03.
GreenWizard вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
QFrame c QLabel минимальный размер + размер по содержимому Krasiosoft Qt и кроссплатформенное программирование С/С++ 1 29.06.2015 04:44
C++ WinAPI - Считать символ с клавиатуры в символьную переменную Sierra26 Win Api 1 06.06.2015 18:41
Подогнать размер flash картинки под размер компонента shockwave flash kestugar Мультимедиа в Delphi 3 15.08.2014 11:03
Адрес и размер переменной Form_13 Общие вопросы Delphi 4 24.09.2011 12:29
Размер Image изменяется на размер картинки, а сама она рисуется на области первой картинки RPGer Мультимедиа в Delphi 6 20.10.2008 19:54