我想将 a 传递int
给需要 a 的函数char *
。
函数头如下所示:
void swapEndian(char *pElement, unsigned int uNumBytes)
并用 int 调用函数(我知道,这行不通..)
int numLine;
swapEndian(numLine, sizeof(int));
那么我必须对 numline 做些什么才能将它传递给这个函数呢?
已经建议的 char* cast 将起作用
swapEndian( (char*) &numLine, sizeof(int) );
...但是,如果您可以将 swapEndian 更改为 void* 会更好,因为它避免了强制转换(这基本上是 void 指针的含义)并且还避免了与强制转换有关的任何潜在问题或潜在的未来问题操作本身...
这听起来好像你只是想要:
swapEndian( (char*) &numLine, sizeof(int) );
除了其他答案,假设swapEndian
它的名字暗示了它,我相信它被错误地声明了。我建议声明它(如果可以的话)
void swapEndian(void *pElement, size_t uNumBytes);
如果swapEndian
适用于每个指向对象的指针,那么您可以传递您的指针,因为根据严格的别名规则,无论指向对象的类型如何,指向字符类型的指针都可以被取消引用。你只需要一个类型转换。
swapEndian((char *)&numLine, sizeof numLine);
C11 (n1570), § 6.5 表达式
对象的存储值只能由具有以下类型之一的左值表达式访问:
— 与对象的有效类型兼容的类型,
— 与对象的有效类型兼容的类型的限定版本,
— 与对象的有效类型相对应的有符号或无符号类型,
— 对应于对象有效类型的限定版本的有符号或无符号类型,
— 在其成员中包含上述类型之一的聚合或联合类型(递归地,包括子聚合或包含联合的成员),或
— 一种字符类型。