powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / что хотят в этой задаче ???
14 сообщений из 14, страница 1 из 1
что хотят в этой задаче ???
    #40002845
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эккель который Брюс. задача от туда .

Текст :
Определить массив типа int. получить начальный адрес массива и привести его к типу void* при помощи static_cast. Написать функцию , в аргументах которой передаются *void, число (количество байт) и значение. Функция должна присваивать передаваемое значение каждому байту в заданном интервале. Протестировать функцию на массиве int.

1. верно ли я понял суть задачи, реализовав следующим образом ?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
#include <iostream>
#include <iostream>
#define TYPE long
using namespace std;
using namespace std;

void myFunc(void* p, int qtyByte,int Val)
{
	unsigned char* z = static_cast<unsigned char*>(p);
	for (int i = 0; i<=qtyByte-1;i++)
		z[i] = Val;
	
}
int main(int argc, char** argv) {
	int m[] = { 0,0,0};
	void* p = static_cast<void *>(m);
	myFunc(p, 2, 10);
}


если верно , то какой смысл перегонять это сначало в void * ??? Можно ведь сразу передать как int *. или может есть смысл сначала в void * ? или автор просто хочет показать , что можно перегнать в void * , а потом обратно преобразовать в исходный ?


2. в чем смысл предостережений использования всяких там staic_cast, reintepret_cast, dynamic_cast ?
скажем Эккель пишет: static_cast это для безопасного или более менее безопасного приведения, включая то которое может быть выполнено неявно.
а скажем reintepret_cast самый опасный из всех видов приведений.
так в чем их опасность то у всех ? что я например потеряю дробную часть, переводя из float в int , ну так я в курсе этого. или что-то ещё ???
...
Рейтинг: 0 / 0
что хотят в этой задаче ???
    #40002847
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81или автор просто хочет показать , что можно перегнать в void * , а потом обратно
преобразовать в исходный

Или не в исходный. Да,именно так, типичная учебная задача на освоение новой техники. В
данном случае - приведения типов.

andron81так в чем их опасность то у всех ?

В багах, которые они могут породить или замаскировать. На пальцах не объяснить, приходит с
опытом многодневной отладки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
что хотят в этой задаче ???
    #40002854
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
смысл перегонять это сначало в void * ???

Dimitry Sibiryakov

Да,именно так, типичная учебная задача на освоение новой техники. В
данном случае - приведения типов.


а ты знаешь , прикол в том , что передавать int * не выйдет, каст_статик забракует :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
#include <iostream>
#define TYPE long
using namespace std;
void myFunc(int* p, int qtyByte, int Val)
{
    unsigned char* z = static_cast<unsigned char*>(p);
    for (int i = 0; i <= qtyByte - 1; i++)
        z[i] = Val;

}
int main(int argc, char** argv) {
    int m[] = { 0,0,0 };
   // void* p = static_cast<void*>(m);
    myFunc(m, 2, 10);
}
...
Рейтинг: 0 / 0
что хотят в этой задаче ???
    #40002861
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81смысл перегонять это сначало в void * ???

Чтобы в жидких мозгах студентов выкристаллизовалось умение пользоваться static_cast.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
что хотят в этой задаче ???
    #40002867
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

со статиком не выйдет иначе.
...
Рейтинг: 0 / 0
что хотят в этой задаче ???
    #40002868
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У некоторых студентов мозги настолько жидкие, что точка насыщения для кристаллизации так и
не образовывается.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
что хотят в этой задаче ???
    #40002900
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

Опасность reintepret_cast в том, что не все преобразования в нем разрешены, но часть тех которые запрещены (например из-за алиасинга) описаны в стандарте как Undefined Behavior(UB), и компилятор не обязан выдавать ошибку (в отличии от static_cast).
Т.е. будет UB, а вы даже не узнаете, пока где-то что-то крашнется (в лучшем случае).
...
Рейтинг: 0 / 0
что хотят в этой задаче ???
    #40002902
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя вот в соседней теме выяснили что и static_cast может подгадить )
https://www.sql.ru/forum/1329465/pochemu-ya-tut-ne-mogu-zamenit-reinterpret-cast-na-static-cast
...
Рейтинг: 0 / 0
что хотят в этой задаче ???
    #40002907
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyОпасность reintepret_cast в том, что не все преобразования в нем разрешены

Точнее я бы сказал, что особо опасен он тем, что некоторая часть разрешённых
преобразований выполняется не совсем так как ожидает наивный кодописатель.

Именно поэтому явные преобразования следует избегать насколько это только возможно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
что хотят в этой задаче ???
    #40002927
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81, это попытка научить студентов изобретать велосипед типа memset
...
Рейтинг: 0 / 0
что хотят в этой задаче ???
    #40002964
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

а во ,пожалуйста, мне подсказали где искать баги .

int x = 0x7ffffff; //134217727
float y = static_cast<float>(x); //134217728.

преобразования явные . и как с этим бороться ??? )))
...
Рейтинг: 0 / 0
что хотят в этой задаче ???
    #40002975
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81и как с этим бороться ??? )))

Легко: никогда не использовать явные преобразования типов без точного понимания зачем и
почему.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
что хотят в этой задаче ???
    #40003160
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andron81,


Я считаю что суть задачи вы поняли верно.

Условие <= N-1 выглядит необычно, обычно пишут <N

Смысл преобразования в void* , чтобы функцию было удобно вызывать без каста на любом объекте.

finc( &x, sizeof(x), 0). Обнулит память переменной x для любого типа.

Посмотрите memset () в stdlib.h
...
Рейтинг: 0 / 0
что хотят в этой задаче ???
    #40003163
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> чем смысл предостережений использования всяких там staic_cast, reintepret_cast, dynamic_cast ?

Это разные виды молотков. Один для подгонки, другой для рихтовки.
Reinterpret_cast это вообще кувалда, которая редко нужна.

Каждый каст увеличивает риск ошибки, поэтому если нужен молоток, начинайте с менее опасных.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / что хотят в этой задаче ???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]