This repository has been archived on 2023-05-13. You can view files and clone it, but cannot push or open issues or pull requests.
mipt_cpp/seminar01_overload/classroom_tasks/code/04other/00pointer_cast.cpp

52 lines
1.7 KiB
C++
Raw Normal View History

2022-09-01 16:37:41 +03:00
#include <iostream>
#include <cstdlib>
using std::cout, std::endl;
/*
В отличии от языка C, язык C++ не делает неявное преобразование типов указателей.
Рассмотрим, например, код:
int a = 10;
char* p = &a;
В языке C такой код сработает, несмотря на то, что в строке char* p = &a; слева стоит указатель типа char*
а справа объект типа int*. Будет произведено неявное преобразование типов указателей.
В языке C++ такой код приведёт к ошибке, так как C++ не преобразует указатели неявно.
Рассмотрим, например, код:
int* q = malloc(10 * sizeof(int));
В языке C такой код сработает, несмотря на то, что слева стоит указатель типа int*
а справа объект типа void* (malloc возвращает указатель типа void*).
Будет произведено неявное преобразование типов указателей.
В языке C++ такой код приведёт к ошибке, так как C++ не преобразует указатели неявно.
*/
int main()
{
int a = 10;
char* p = &a;
int* q = malloc(10 * sizeof(int));
}
/*
Задача:
Исправьте ошибки компиляции, явно приведя указатель к правильным типам.
*/