#include <stdio.h>
#include <stdlib.h>
const int * func()
{
int * i = malloc(sizeof(int));
(*i) = 5; // initialize the value of the memory area
return i;
}
int main()
{
int * p = func();
printf("%d\n", (*p));
(*p) = 3; // attempt to change the memory area - compiles fine
printf("%d\n", (*p));
free(p);
return 0;
}
Почему компилятор позволяет мне изменять (*p)
, даже если func()
возвращает константный указатель?
Я использую gcc, он показывает только предупреждение в строке int * p = func();
: «предупреждение: инициализация отбрасывает квалификаторы из целевого типа указателя».
Спасибо.
-pedantic-errors
или-Werror
. - person Steve Jessop   schedule 24.07.2011