реклама на сайте
подробности

 
 
> параметр функции const float*, невозможно присвоить локальной переменной float*
sigmaN
сообщение Aug 6 2008, 12:40
Сообщение #1


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Столкнулся с проблемой:
Код
void func1(const float* param1){
  float* paramcpy;
  void* voidparamcpy;
  paramcpy=param1;  //и вот тут компилятор возмутился
  paramcpy=(float*)param1;  //тут тоже
  voidparamcpy=(void*)param1; /*так работает, но мне нужно будет делать инкремент указателя, а void* не инкрементируется*/


}

Компилятор CCS3.3

Как в что делать? Тип параметра менять нельзя.


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Aug 6 2008, 13:05
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



const float * говорит о том, что переменную, на которую указывает такой указатель менять нельзя. И компилятор понимает, что в месте, где вызвана эта функция, переменная не будет изменена. Вы же пытаетесь присвоить этот указатель обычному float *, который разрешает модифицировать переменную. Вам надо либо объявить paramcpy тоже как const float*, либо при присвоении делать явное (принудительное) приведение типа: paramcpy = (float *)param1; Но в этом случае возможны подводные камни, ибо компилятор может перед вызовом функции сохранить значение по указателю в регистрах (поскольку уверен, что оно не изменяется) и после выхода из функции использовать сохраненное значение. Значит, вы либо действуете честно - не меняете значение по указателю и, значит, можете смело объявить paramcpy как const float *, либо, если значение по указателю должно изменяться, не имеете права объявлять параметр как const float *, а должны его объявлять как float *. Раз тип параметра менять нельзя, значит нельзя и менять значение, на которое он указывает.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 05:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01353 секунд с 7
ELECTRONIX ©2004-2016