2015-06-03 2 views
0

К моей функции я получаю указатель void, я хотел бы указать на следующее местоположение, учитывая, что входящий указатель имеет тип char.Использование оператора Increment с де-ссылкой в ​​C

int doSomething(void * somePtr) 
{ 
    ((char*)somePtr)++; // Gives Compilation error 
} 

Я получаю следующее сообщение об ошибке компиляции:

Error[Pe137]: expression must be a modifiable lvalue 

Является ли это проблемой с приоритетом операторов?

+0

* Какие ошибки компиляции *? – Quentin

+0

Ошибка [Pe137]: выражение должно быть модифицируемым значением l12ue –

+1

'((char *) somePtr)' не является переменной, вы не можете его инкрементировать. –

ответ

3

Литые не дает именующее выражение (смотрите раздел 6.5.4 сноски 104 стандарта C11), поэтому вы не можете применить сообщение приращения ++ оператора к его результату.

c-faq: 4.5:

In C, a cast operator does not mean "pretend these bits have a different type, and treat them accordingly"; it is a conversion operator, and by definition it yields an rvalue, which cannot be assigned to, or incremented with ++. (It is either an accident or a deliberate but nonstandard extension if a particular compiler accepts expressions such as the above.)

Попробуйте вместо

char *charPtr = ((char*)somePtr); 
charPtr++; 
1

Если вы хотите, чтобы переместить указатель на следующий, то вы можете использовать:

*ptr++; 

Если вы хотите изменить копию позиция указателя на другую переменную:

char *abc = (char*)(def + 1); 

Это действительно зависит от мотива, чтобы сделать вещи

+1

Примечание: вы используете код gnu c. std не определил дополнение к void ptr. – HuStmpHrrr

+1

Я согласен, но он не просил std – Vineet1982

+0

Проблема в том, что мне нужно переместиться в следующее место, но это указатель на пустоту, я пытаюсь сказать компилятору, что мне нужно разыменовать его как указатель на указатель и приращение. Таким образом, проблема заключается в том, что при одновременном выполнении обоих это дает ошибку компилятора –

 Смежные вопросы

  • Нет связанных вопросов^_^