要使用pthreads,我将用作输入的char *作为输入转换为void *作为输入。如果它后来转换为(char *),它可以正常打印和使用((char *)var)。但是,如果有人(char *)var [i],其中'我'将帮助我们引用一个字符,它不会。为什么?为什么我不能引用先前投射的字符串中的字符无效?
例如MS表示'表达式必须是一个指向完整对象类型的指针'。
要使用pthreads,我将用作输入的char *作为输入转换为void *作为输入。如果它后来转换为(char *),它可以正常打印和使用((char *)var)。但是,如果有人(char *)var [i],其中'我'将帮助我们引用一个字符,它不会。为什么?为什么我不能引用先前投射的字符串中的字符无效?
例如MS表示'表达式必须是一个指向完整对象类型的指针'。
由于运算符的优先级:投射出现在下标运算符之后。
您必须编写((char*)var)[i];
。
尝试(char *) &var[i]
,但只是从var[i]
获得参考。你不能这样做(char *) var[i]
,因为它实际上试图转换char to (char *)
。
在这种情况下,强制转换的优先级低于数组索引。相反,你将不得不做一些像*((char *)var + i)
,但最明显的方法可能是将其分配到一个临时的:
char *str = var;
printf("%c", str[i]);
我喜欢在第二句你的思维。它解释清楚。这也解释了为什么Simone的答案有效。 – 2010-11-30 09:06:50