Странные коды в c

Здесь странный код:

const double a[] = {0,1,2,3,4};
int main()
{
    double *p = a;
    printf("%f\n",p[2]); //2.000000
    printf("%f\n",p);    //2.000000
}

Он возвращает 2.000000, почему?


person user7733855    schedule 31.03.2017    source источник
comment
Это вопрос с подвохом? почему бы ему не вернуть третий элемент массива?   -  person Chris Turner    schedule 31.03.2017
comment
результат printf("%f\n",p); - UB.   -  person BLUEPIXY    schedule 31.03.2017


Ответы (1)


Код

printf("%f\n",p);

вызывает неопределенное поведение. Чтобы напечатать адрес (указатель), который является типом, до которого распадается имя массива при передаче в качестве аргумента функции, вам необходимо:

  • используйте спецификатор преобразования %p.
  • приведите аргумент к (void *).
person Sourav Ghosh    schedule 31.03.2017