С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
2 / 2 / 1
Регистрация: 08.03.2019
Сообщений: 62
1

Указатели. Сравнение двух указателей и их sizeof()

11.12.2019, 16:55. Показов 2543. Ответов 25
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int main() {
int x = 10;
int y = 10;
int *xptr = &x;
int *yptr = &y;
setlocale(LC_ALL, "Russian");
//сравниваем указатели
if (xptr == yptr)
cout << "Указатели равны\n";
else
cout << "Указатели неравны\n";
 
if (sizeof(xptr) == sizeof(yptr)) {
cout << "Значения равны\n";
}
else {
cout << "Значения неравны\n";
}
system("pause");
return 0;
}
Нужно сделать так, чтобы в консоль выводилось сначала из первого условия "Указатели равны", а затем из второго "Значения неравны".При этом редактировать часть кода после setlocale нельзя. Как это сделать? Пробовал менять у второго указателя тип на float, но тогда в первом условии выдаёт ошибку (сравнение int и float),к тому же sizeof не изменился. Пробовал во втором указателе также написать &x,а после изменить значение в указателе, но тогда меняется и первый указатель, и они снова равны во втором условии.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Блог
11.12.2019, 16:55
Ответы с готовыми решениями:

Указатели. Сравнение двух указателей и их sizeof()
Есть код: int main() { int x = 10; int y = 10; int *xptr = &amp;x; int *yptr = &amp;y;...

Почему Лафоре использует указатели на указатели, вместо обмена значениями указателей?
Доброго времени суток! Задался теоретическим вопросом. Читал пример из книги Лафоре...

Массивы указателей и указатели на указатели
В чем разница между массивами указателей и указателями на указатели? Может, между ними такая же...

Через указатели на указатели посчитать сумму двух чисел и записать в третье
1. Через указатели на указатели посчитать сумму двух чисел и записать в третье. 2. Написать...

25
Just Do It!
4029 / 2423 / 640
Регистрация: 23.09.2014
Сообщений: 7,811
Записей в блоге: 2
11.12.2019, 18:22 2
Денис73,

C++
1
2
3
4
5
int main()
{   int xptr[2];
    int *yptr = &xptr[0];
    setlocale(LC_ALL, "Russian");
...
1
Вездепух
Эксперт CЭксперт С++
12798 / 6674 / 1796
Регистрация: 18.10.2014
Сообщений: 16,894
11.12.2019, 18:38 3
Цитата Сообщение от Денис73 Посмотреть сообщение
Нужно сделать так, чтобы в консоль выводилось сначала из первого условия "Указатели равны", а затем из второго "Значения неравны".
Так а каковы ограничения? Что можно делать, а что нельзя? В заголовке сказано: сравнение двух указателей. Это означает, что об должны остаться именно голыми указателями? Или это не обязательно?

А то можно написать просто

C++
1
2
char x = 1;
long long y = 1;
(хоть это теоретически и не гарантирует разницу размеров).

С обычными указателями задача не имеет практического решения. Все указатели на практических платформах имеют один и тот же размер.
1
Just Do It!
4029 / 2423 / 640
Регистрация: 23.09.2014
Сообщений: 7,811
Записей в блоге: 2
11.12.2019, 18:42 4
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
С обычными указателями задача не имеет практического решения
да ну, прям так и не имеет.
0
Вездепух
Эксперт CЭксперт С++
12798 / 6674 / 1796
Регистрация: 18.10.2014
Сообщений: 16,894
11.12.2019, 18:53 5
Цитата Сообщение от XLAT Посмотреть сообщение
да ну, прям так и не имеет.
Ну так не томите. Решение - в студию! Или вы про экзотические платформы (например, Cray PVP), где указатели разного типа могут иметь разные размеры?
0
Just Do It!
4029 / 2423 / 640
Регистрация: 23.09.2014
Сообщений: 7,811
Записей в блоге: 2
11.12.2019, 18:57 6
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Ну так не томите
вы серъёзно?
вот:
Указатели. Сравнение двух указателей и их sizeof()
0
Эксперт С++
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
11.12.2019, 19:00 7
...
0
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
11.12.2019, 19:01 8
XLAT, xptr не тип указатель, а массив, который лишь приводится к типу указатель
0
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
11.12.2019, 19:02 9
0
Мозгоправ
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
11.12.2019, 19:04 10
Денис73, если xptr и yptr указатели, то sizeof(xptr) == sizeof(yptr) - всегда истина, поскольку указатель хранит адрес в памяти и от типа данных, которые лежат по этому адресу, размер самого адреса не зависит. Может во втором if имелось ввиду sizeof(*xptr) == sizeof(*yptr)?
0
Just Do It!
4029 / 2423 / 640
Регистрация: 23.09.2014
Сообщений: 7,811
Записей в блоге: 2
11.12.2019, 19:09 11
zayats80888,
понимаю,
я сам люблю читать задание наискось одним глазом.

есть два пути:
1. прочитать задание.
2. или ваще ничо не пейсать.

0
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
11.12.2019, 19:14 12
C++
1
2
3
4
5
6
7
8
9
10
11
template <typename T>
bool operator==(const int* p, const std::shared_ptr<T>& up) {
    return p == up.get();
}
int main()
{
    int* xptr(new int);
    std::shared_ptr<int> yptr(xptr);
 
    setlocale(LC_ALL, "Russian");
...
2
Mental handicap
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
11.12.2019, 19:18 13
x2
0
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
11.12.2019, 19:21 14
nalbe666, для своего кода проверь
C++
1
std::cout << std::is_pointer_v<decltype(yptr)>;
1
Вездепух
Эксперт CЭксперт С++
12798 / 6674 / 1796
Регистрация: 18.10.2014
Сообщений: 16,894
11.12.2019, 19:22 15
Цитата Сообщение от XLAT Посмотреть сообщение
вы серъёзно?
вот:
Указатели. Сравнение двух указателей и их sizeof()
Вы серьезно?

Еще раз повторю свое утверждение, жирными буквами: С обычными указателями задача не имеет практического решения. Все указатели на практических платформах имеют один и тот же размер.

В вашем варианте xptr является массивом, а не указателем. Какое он имеет отношение к моему утверждению выше?
0
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
11.12.2019, 19:29 16
zayats80888, получил 0.
Собственно, зачем что-то ещё проверять, когда задача довольно проста: написать что угодно, лишь бы отработали два условия if сначала true, затем false. Shared_ptr весит как два обычных, на этом я и сыграл. Что-то не так?
1
Вездепух
Эксперт CЭксперт С++
12798 / 6674 / 1796
Регистрация: 18.10.2014
Сообщений: 16,894
11.12.2019, 19:36 17
Цитата Сообщение от nalbe666 Посмотреть сообщение
написать что угодно, лишь бы отработали два условия if сначала true, затем false.
Если задача заключается в том, чтобы "написать что угодно", то она элементарна. И никакого shared_ptr не нужно.

Но, судя по формулировке, "написать что угодно" не допускается.
0
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
11.12.2019, 19:41 18
Цитата Сообщение от Денис73 Посмотреть сообщение
Нужно сделать так, чтобы в консоль выводилось сначала из первого условия "Указатели равны", а затем из второго "Значения неравны".При этом редактировать часть кода после setlocale нельзя.
TheCalligrapher, где написано, что не допускается? А моё решение конечно же кривое, но работает в соответствии с моим пониманием условия.
1
Just Do It!
4029 / 2423 / 640
Регистрация: 23.09.2014
Сообщений: 7,811
Записей в блоге: 2
11.12.2019, 19:58 19
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Какое он имеет отношение к моему утверждению выше?
ага, так это вы уже про своё какое-то задание.
тогда лучше для этого вам отдельный тред сочинить
0
Вездепух
Эксперт CЭксперт С++
12798 / 6674 / 1796
Регистрация: 18.10.2014
Сообщений: 16,894
11.12.2019, 20:02 20
Цитата Сообщение от XLAT Посмотреть сообщение
ага, так это вы уже про своё какое-то задание.
При чем здесь "задание", "своё" или "не своё"? Я сделал совершенно конкретное утверждение и вы отвечали на мое конкретное утверждение, а не на "задание". Процитировать, или сами найдете?

Вы уж определитесь, кому и на что вы отвечаете.
0
11.12.2019, 20:02
cpp_developer
Эксперт
20123 / 5690 / 417
Регистрация: 09.04.2010
Сообщений: 12,546
Блог
11.12.2019, 20:02
Помогаю со студенческими работами здесь

Является ли оператор sizeof синтаксическим сахаром над System.Runtime.InteropServices.Marshal.SizeOf?
Является ли оператор sizeof синтаксическим сахаром над...

Указатели. Вычитание указателей
Сам читаю книгу Шилдта. Глава с указателями, написано - &quot;Если складывать указатели нельзя, то...

Указатели. Важность указателей
Здарова! Я хорошо понимаю (относительно хорошо, конечно), что такое указатели. Я слышал, что...

Sizeof(.) или constexpr size_t tmp = sizeof(.)
sizeof(...) или constexpr size_t tmp = sizeof(...) Как лучше с точки зрения производительности?...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru