简体   繁体   English

为什么我不能引用以前转换为void的字符串中的字符?

[英]Why can't I reference a character in a string that was previously cast to void?

To use pthreads, I used as input a char* that was cast to void* as input. 要使用pthread,我将char *用作输入,并将其转换为void *作为输入。 If it's later cast to (char*) it can be printed and used normally ( (char*)var ). 如果以后将其转换为(char *),则可以正常打印并使用((char *)var)。 However, if one does (char*)var[i], where 'i' will help us reference a character, it doesn't. 但是,如果使用(char *)var [i],则“ i”将帮助我们引用一个字符,但不是。 Why? 为什么?

eg MS says 'expression must be a pointer to a complete object type'. 例如,MS说“表达式必须是指向完整对象类型的指针”。

Because of operator precedence: the cast comes after the subscript operator. 由于运算符优先级:强制转换位于下标运算符之后。

You have to write ((char*)var)[i]; 您必须编写((char*)var)[i]; .

The cast, in this case, is lower precedence than the array indexing. 在这种情况下,强制类型转换的优先级低于数组索引的优先级。 Instead, you would have to do something like *((char *)var + i) , but the clearest approach is probably to assign it to a temporary: 相反,您必须执行类似*((char *)var + i) ,但是最清晰的方法可能是将其分配给临时对象:

 char *str = var;
 printf("%c", str[i]);

Try (char *) &var[i] , but that simply gets reference from var[i] . 尝试(char *) &var[i] ,但这只是从var[i]获得引用。 You can't do (char *) var[i] as that actually tries to convert a char to (char *) . 您不能执行(char *) var[i]因为它实际上试图将char to (char *)转换char to (char *)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM