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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
pEntity
11 / 6 / 1
Регистрация: 12.12.2012
Сообщений: 393
#1

Как верно узнать размер указателя ? - C++

17.06.2014, 08:03. Просмотров 1249. Ответов 28
Метки нет (Все метки)

C++
1
СBaseTest* pTest[] = { new СBaseTest, new СOther };
Нужно узнать размер pTest
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2014, 08:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как верно узнать размер указателя ? (C++):

Как узнать адрес указателя? - C++
(void *)str показывает адрес строки, а как узнать адрес указателя? char *str = "bla-bla-bla"; cout << "Value of str is: " << str <<...

Как узнать адрес указателя на char? - C++
Например, вот есть массив символов и указатель. И указателю присваиваем адрес этого массива. А как узнать адрес самого указателя? char...

Как узнать длину указателя (в байтах)? - C++
как узнать длину указателя(в байтах) sizeof(указатель)почему то не работает?

Как узнать текущее положение указателя файла? - C++
Как узнать текущее положение указателя файла в байтах?

Как узнать размер массива? - C++
Имею функцию template <typename T> int funk(T mas, T element) { //kod }

Как узнать размер массива? - C++
Нужно узнать размер введенного пользователем массива, но sizeof() почему-то не работает, помогите пожалуйста разобраться! int...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
uglyPinokkio
326 / 229 / 41
Регистрация: 30.05.2014
Сообщений: 682
17.06.2014, 17:10 #16
Цитата Сообщение от pEntity Посмотреть сообщение
Так у size нет аргументов.
Методом оно от этого быть не перестает.
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
17.06.2014, 21:04 #17
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Написано же:



vector.size()

И называть переменную именем типа - плохая идея.
Открывать неймспейс никто не заставляет
0
pEntity
11 / 6 / 1
Регистрация: 12.12.2012
Сообщений: 393
18.06.2014, 01:16  [ТС] #18
Я сделал как сказал компилятор: printf( "DEBUG: %d\n", &std::vector<CBaseTest>::size );

Получил 3274627834
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.06.2014, 01:24 #19
size() должен объект вектора вызывать. И зачем здесь взятие адреса (&)?
0
pEntity
11 / 6 / 1
Регистрация: 12.12.2012
Сообщений: 393
18.06.2014, 01:49  [ТС] #20
Не понимаю. Покажите пример.
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.06.2014, 01:58 #21
Цитата Сообщение от pEntity Посмотреть сообщение
Не понимаю. Покажите пример.
Покажите свой вектор, и что хотите узнать.
0
pEntity
11 / 6 / 1
Регистрация: 12.12.2012
Сообщений: 393
18.06.2014, 02:01  [ТС] #22
C++
1
2
3
4
std::vector<std::shared_ptr<CBaseTest>> vTest;
 
    vTest.push_back(std::make_shared<CBaseTest>());
    vTest.push_back(std::make_shared<COther>());
Нужно узнать размер вектора.
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.06.2014, 02:09 #23
Цитата Сообщение от pEntity Посмотреть сообщение
Нужно узнать размер вектора.
C++
1
int n = vTest.size();
1
pEntity
11 / 6 / 1
Регистрация: 12.12.2012
Сообщений: 393
18.06.2014, 02:17  [ТС] #24
А, вот я дурак не внимательный, я же забыл скобки у .size
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.06.2014, 02:18 #25
Цитата Сообщение от pEntity Посмотреть сообщение
я же забыл скобки у .size
14 пост.
1
pEntity
11 / 6 / 1
Регистрация: 12.12.2012
Сообщений: 393
19.06.2014, 05:34  [ТС] #26
А как в vTest записать данные через конструктор и узнать их?
0
0x10
2464 / 1636 / 238
Регистрация: 24.11.2012
Сообщений: 4,031
19.06.2014, 06:03 #27
Цитата Сообщение от pEntity Посмотреть сообщение
А как в vTest записать данные через конструктор и узнать их?
11 пост.
0
pEntity
11 / 6 / 1
Регистрация: 12.12.2012
Сообщений: 393
19.06.2014, 06:29  [ТС] #28
Что-то я с вами совсем запутался. И объясните про shared_ptr, я не осилил это:

Создает и возвращает shared_ptr, указывающего на выбранным объектам, построенных с нуля или больше аргументов с помощью распределителя по умолчанию.
Давайте разберемся.

Мне нужны были указатели на класс CBaseTest и COther для доступа к их членам и методам.

Вы подсказали сделать так:

C++
1
2
3
4
std::vector<std::shared_ptr<CBaseTest>> vTest;
 
vTest.push_back(std::make_shared<CBaseTest>());
vTest.push_back(std::make_shared<COther>());
Теперь я могу обращаться к CBaseTest - vTest.at( 0 ).MyFunc(); a к COther - COther.at( 1 ).MyFunc();

Теперь мне надо создать пару переменных для класса CBaseTest и записывать их, можно сделать так?


C++
1
2
3
4
5
    CBaseTest( int iNum )
    {
        iNumGlobal = iNum ;
        vector.push_back(std::make_shared<CBaseTest>( iNum ) );
    }
Выходит я смогу получить значение iNumGlobal так = vTest.at( 2 ).iNumGlobal;

Всё верно понял?
0
0x10
2464 / 1636 / 238
Регистрация: 24.11.2012
Сообщений: 4,031
19.06.2014, 08:03 #29
pEntity, что мешает взять и проверить? Сходу могу только сказать, что если уж у нас векторуказателей, то и доступ к полям будет через оператор ->, а не через точку.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2014, 08:03
Привет! Вот еще темы с ответами:

Как узнать размер файла - C++
Вобщем программа -кодировщик методом Хаффмана, взята из интернета. Нужно добавить к ней вывод размера входного файла и сжатого.. ...

Как узнать размер массива - C++
В задаче нужно для решения узнать размер массива. Если sizeof() возвращает кол-во занятой памяти в байтах, и sizeof(char)=2, то ...

как узнать размер строки? - C++
есть массив указателей string **str на объекта класс string; как узнать размер строки, записанной, например, в *str?

Размер указателя - C++
sizeof(void*);// Размер указателя на любой тип равен 8, почему так много? И можно ли как-нибудь узнать сколько под указатель выделено...


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

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

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