Программа имеет неопределенное поведение.
Для начала функция f
должна быть объявлена перед ее вызовом в main.
В этом случае компилятор выдаст ошибку о том, что квалификатор const аргумента был отброшен.
Изменение константного объекта (в данном случае постоянного указателя) через указатель приводит к неопределенному поведению.
Вторая причина неопределенного поведения заключается в том, что переменная j
является локальной переменной функции f
. Таким образом, после выхода из функции переменная больше не является активной, и указатель p
имеет недопустимое значение.
Если вы напишите функцию правильно, объявив ее перед вызовом в main, например,
#include <stdio.h>
void f( int *const *p )
{
int j = 11;
*p = &j;
printf( "**p = %d\n", **p );
}
int main(void)
{
int i = 10;
int * const p = &i;
f( &p );
printf( "*p = %d\n", *p );
return 0;
}
вы получите сообщение об ошибке, подобное следующему
prog.c: In function ‘f’:
prog.c:7:5: error: assignment of read-only location ‘*p’
*p = &j;
^