2010-11-30 24 views
1

要使用pthreads,我将用作输入的char *作为输入转换为void *作为输入。如果它后来转换为(char *),它可以正常打印和使用((char *)var)。但是,如果有人(char *)var [i],其中'我'将帮助我们引用一个字符,它不会。为什么?为什么我不能引用先前投射的字符串中的字符无效?

例如MS表示'表达式必须是一个指向完整对象类型的指针'。

回答

6

由于运算符的优先级:投射出现在下标运算符之后。

您必须编写((char*)var)[i];

1

尝试(char *) &var[i],但只是从var[i]获得参考。你不能这样做(char *) var[i],因为它实际上试图转换char to (char *)

+0

我喜欢在第二句你的思维。它解释清楚。这也解释了为什么Simone的答案有效。 – 2010-11-30 09:06:50

2

在这种情况下,强制转换的优先级低于数组索引。相反,你将不得不做一些像*((char *)var + i),但最明显的方法可能是将其分配到一个临时的:

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