52 lines
1.7 KiB
C++
52 lines
1.7 KiB
C++
|
#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));
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
|
|||
|
Задача:
|
|||
|
|
|||
|
Исправьте ошибки компиляции, явно приведя указатель к правильным типам.
|
|||
|
|
|||
|
*/
|