const double * bar = (const double *) foo ;? - PullRequest
       10

const double * bar = (const double *) foo ;?

0 голосов
/ 19 октября 2019

Я работаю над кодом C, в котором меня беспокоит объявление переменной. На самом деле код работает нормально, но я этого не понимаю!

У меня есть объявление переменной, которое выглядит примерно так:

    double *foo;
    // Here is the "weird" declaration :
    const double *bar = (const double *) foo;

Если мне кажется, я понимаю первую половину объявления и понимаю, что адрес памяти или фактическое значение является постоянным(в этом случае bar - указатель на const double, поправьте меня, если я ошибаюсь?), я не совсем понимаю часть (const double *).

Является ли это способом преобразования указателя на double foo непосредственно в const double?

В любом случае, чем интересна такая декларация?

Спасибо!

Ответы [ 2 ]

1 голос
/ 19 октября 2019

Вы можете рассматривать «вторую часть» так, как если бы указатель foo, объявленный ранее как

double *foo;

, был повторно объявлен (переинтерпретирован), как если бы он имел тип const double *

const double *bar = (const double *) foo;

литье не требуется. Вы можете просто написать

const double *bar = foo;

Это означает, что теперь значение панели указателей совпадает со значением указателя foo. То есть оба указателя указывают на один и тот же объект. Но знайте, используя панель указателей, которая указывает на тот же объект, что и указатель foo, вы не можете изменить указанный объект.

0 голосов
/ 19 октября 2019

Разве это не работает, если вы исключите (const double *) часть?

double *foo;
// Here is the "weird" declaration :
const double *bar = foo;

Должно работать так же

...