#include<stdio.h>
void foo(int **p)
{
int j=11;
*p = &j;
printf("%d ", **p);
}
int main(void)
{
int i = 10;
int *const p = &i;
foo(&p);
printf("%d ", *p);
return 0;
}
На компиляции:предупреждение: передавая аргумент 1 из 'сопзЬ' классификатором 'Foo' отбрасывает от указателя целевого типа
example.c:12:2: warning: passing argument 1 of ‘foo’ discards ‘const’ qualifier from pointer target type [enabled by default]
foo(&p);
example.c:2:6: note: expected ‘int **’ but argument is of type ‘int * const*’
void foo(int **p)
В перспективе:
11 11
Здесь р является постоянным указателем поэтому почему нет ошибки для изменения его содержания и только для предупреждения?
Мои сомнения по указанной выше программе из-за следующей программе:
#include<stdio.h>
int main(void)
{
int var1 = 0, var2 = 0;
int *const ptr = &var1;
ptr = &var2;
printf("%d\n", *ptr);
return 0;
}
На компиляции:
error: assignment of read-only variable ‘ptr’
ptr = &var2;
[post] (http://stackoverflow.com/questions/7736049/const-char-pointer-assignments/7738315#7738315) может быть полезно –