327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
1

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

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

Author24 — интернет-сервис помощи студентам
C++
1
СBaseTest* pTest[] = { new СBaseTest, new СOther };
Нужно узнать размер pTest
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.06.2014, 08:03
Ответы с готовыми решениями:

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

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

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

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

28
13 / 13 / 3
Регистрация: 30.06.2013
Сообщений: 168
17.06.2014, 08:06 2
sizeof( pMonsters )
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
17.06.2014, 08:08 3
Используйте вектор...
0
327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
17.06.2014, 08:13  [ТС] 4
Hsac, недопустимы не полный тип или с & или с *

0x10,а можно примерчик ? Не совсем понимаю что вы подразумеваете под использованием.
0
Эксперт по математике/физикеЭксперт С++
2044 / 1363 / 393
Регистрация: 16.05.2013
Сообщений: 3,500
Записей в блоге: 6
17.06.2014, 08:23 5
Цитата Сообщение от pEntity Посмотреть сообщение
Нужно узнать размер pTest
Так ведь
C++
1
sizeof(pTest) / sizeof(СBaseTest)
0
327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
17.06.2014, 08:33  [ТС] 6
На СBaseTest легло, на pTest:

error C2070: СBaseTest*[]: недопустимый оператор sizeof
Заработало так и так

sizeof(&pTest) / sizeof(СBaseTest)

sizeof(*pTest) / sizeof(СBaseTest)
0
Эксперт по математике/физикеЭксперт С++
2044 / 1363 / 393
Регистрация: 16.05.2013
Сообщений: 3,500
Записей в блоге: 6
17.06.2014, 08:42 7
Цитата Сообщение от pEntity Посмотреть сообщение
Заработало так и так
А ну так у вас же массив указателей... во.
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
17.06.2014, 08:44 8
Цитата Сообщение от pEntity Посмотреть сообщение
что вы подразумеваете под использованием
Создавать не массив указателей, а std::vector этих же указателей.
0
Эксперт по математике/физикеЭксперт С++
2044 / 1363 / 393
Регистрация: 16.05.2013
Сообщений: 3,500
Записей в блоге: 6
17.06.2014, 08:45 9
Цитата Сообщение от 0x10 Посмотреть сообщение
Создавать не массив указателей, а std::vector этих же указателей.
И по хорошему shared_ptr в помощь...
0
327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
17.06.2014, 08:47  [ТС] 10
Просто кладя в push_back?

C++
1
2
vTest.push_back( СBaseTest );
vTest.push_back( СOther )
?

Но это вроде как я положу весь объект класса..
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
17.06.2014, 09:10 11
C++03
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <vector>
 
struct A {};
struct B : public A {};
 
int main() {
    std::vector<A*> objs;
    
    objs.push_back(new A());
    objs.push_back(new B());
 
    return 0;
}
C++11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <vector>
#include <memory>
 
struct A {};
struct B : public A {};
 
int main() {
    std::vector<std::shared_ptr<A>> objs {
        std::make_shared<A>(),
        std::make_shared<B>(),
    };
    
    return 0;
}
1
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
17.06.2014, 09:14 12
C++
1
2
3
4
5
6
7
8
#include <memory>
#include <vector>
...
std::vector<std::shared_ptr<CBase>> vector;
//vector.reserve(n);
vector.push_back(std::make_shared<CBaseTest>());
vector.push_back(std::make_shared<COther>());
...
1
327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
17.06.2014, 10:17  [ТС] 13
а в std::vector<std::shared_ptr<CBase>> vector;

CBase это класс родитель, то есть COther или что? Я тут написал CBaseTest

printf( "DEBUG: %d\n", vector.size );

error C3867: std::vector<_Ty>::size: в вызове функции отсутствует список аргументов; используйте "&std::vector<_Ty>::size" для создания указателя на член
1> with
1> [
1> _Ty=std::shared_ptr<CBaseTest>
1> ]
0
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
17.06.2014, 10:19 14
Написано же:

Цитата Сообщение от pEntity Посмотреть сообщение
в вызове функции отсутствует список аргументов
vector.size()

И называть переменную именем типа - плохая идея.
1
327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
17.06.2014, 15:48  [ТС] 15
Так у size нет аргументов.
0
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
17.06.2014, 17:10 16
Цитата Сообщение от pEntity Посмотреть сообщение
Так у size нет аргументов.
Методом оно от этого быть не перестает.
0
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
17.06.2014, 21:04 17
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Написано же:



vector.size()

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

Получил 3274627834
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.06.2014, 01:24 19
size() должен объект вектора вызывать. И зачем здесь взятие адреса (&)?
0
327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
18.06.2014, 01:49  [ТС] 20
Не понимаю. Покажите пример.
0
18.06.2014, 01:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.06.2014, 01:49
Помогаю со студенческими работами здесь

Как узнать размерность указателя на массив
Такой вопрос, создаю динамический массив, но т.к. это указатель, то при запросе размерности...

Как узнать размер строки как размер массива
const char* test_str = &quot;01234\x00 789&quot;; //очевидно, что strlen(test_str) == 5; sizeof(test_str)...

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

Как узнать размер файла?
Можете подсказать, какая функция показывает размер файла?


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru