Почему я не могу сослаться на символ в строке, которая была ранее преобразована в void? - PullRequest
1 голос
/ 30 ноября 2010

Чтобы использовать pthreads, я использовал в качестве входных данных символ *, который был приведен к void * в качестве входных данных. Если позже он приведен к (char *), его можно распечатать и использовать как обычно ((char *) var). Однако, если кто-то делает (char *) var [i], где «i» поможет нам ссылаться на символ, это не так. Почему?

например. MS говорит, что «выражение должно быть указателем на полный тип объекта».

Ответы [ 3 ]

6 голосов
/ 30 ноября 2010

Из-за приоритета оператора: приведение происходит после оператора индекса.

Вы должны написать ((char*)var)[i];.

2 голосов
/ 30 ноября 2010

В данном случае приведение имеет более низкий приоритет, чем индексирование массива.Вместо этого вам нужно будет сделать что-то вроде *((char *)var + i), но самый простой подход, вероятно, состоит в том, чтобы назначить его временному:

 char *str = var;
 printf("%c", str[i]);
1 голос
/ 30 ноября 2010

Попробуйте (char *) &var[i], но просто получите ссылку из var[i].Вы не можете сделать (char *) var[i], поскольку это на самом деле пытается конвертировать char to (char *).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...