Аргумент указателя от двойного до двойного *

Vim 8.x:

Теперь вы можете изменить цвет только для конца буфера ~:

highlight EndOfBuffer ctermfg=black ctermbg=black

См. журнал изменений для Vim 8.x.

-4
задан TRM 13 July 2018 в 21:38
поделиться

2 ответа

Я уверен, что это было сказано в миллиард раз, но подумайте о переменной указателя как о переменной.

double * - это просто тип, а на 32 не машинах он может содержать 4 байтовых значения. На 64 машинах нет большего пространства адресации, поэтому указатели больше.

Тогда, если double * - это просто переменная, которая может хранить 4-байтовый адрес двойника, тогда ему нужен адрес чего-то ...

Вы можете взять адрес другого переменные, использующие '& amp;'

Пример:

double* ptr = &anotherVariable;

Теперь 'ptr' содержит 4-байтовый адрес, а затем вы можете получить доступ к содержимому переменной путем разыменования самого двойного указателя.

Пример:

*ptr = 4.2;

Однако сама переменная «ptr» содержит адрес, так что «anotherVariable», который был назначен ему ранее, также имеет значение 4.2

Теперь, если вы передали значение функции, а параметр функции был «double * temp». Вы можете передать ему адрес переменной или фактический указатель, и внутри этой функции вы можете выполнять все те же действия, что и выше.

0
ответ дан Bailey Kocin 17 August 2018 в 12:07
поделиться
  • 1
    Спасибо за эту перспективу, как это работает, это очень полезно с моим пониманием. Очень ценю. – TRM 13 July 2018 в 22:24

Вам необходимо внести следующие изменения в вашу программу.

  1. Измените тип возврата функции на double.
    double celsius(double*);
    
  2. Когда вы вызываете функцию, убедитесь, что вы передаете указатель на double, а не на double.
    temp = celsius(&value);  // Use &value, not value
    
  3. В функции вам нужно использовать *par для разыменования указателя и использования его значения.
    tem = (1.8 * (*par) + 32);  // Use *par not just par
    

Другой вариант - оставить возвращаемый тип как есть, но изменить реализацию функции.

void celsius(double *par)
{
   *par = (1.8 * (*par) + 32);
}

и изменить использование на просто

celsius(&value);
cout << value << endl;
3
ответ дан NathanOliver 17 August 2018 в 12:07
поделиться
  • 1
    Почему бы просто не предложить изменить void celsius(double*) на double celsius(double)? Это одно изменение вместо 3. – NathanOliver 13 July 2018 в 21:48
  • 2
    @NathanOliver, я не хотел менять мотивацию OP - попытаться лучше понять указатели – R Sahu 13 July 2018 в 21:49
  • 3
    Ах, в этом случае void celsius(double *par) { *par = (1.8 * (*par) + 32) } и celsius(value); cout << value << endl; продемонстрировали бы, что больше. – NathanOliver 13 July 2018 в 21:50
  • 4
    @NathanOliver, это тоже вариант. Благодаря :) – R Sahu 13 July 2018 в 21:53
  • 5
    Цените помощь! Это помогает мне понять это намного больше. Часть проблемы рассматривалась так много разных примеров и не видя, что собралось вместе. Но эти примеры действительно демонстрируют это хорошо :) – TRM 13 July 2018 в 22:23
Другие вопросы по тегам:

Похожие вопросы: