我想将int
传递给期望char *
。
函数标题如下所示:
void swapEndian(char *pElement, unsigned int uNumBytes)
并使用int调用该函数(我知道,这不起作用..)
int numLine;
swapEndian(numLine, sizeof(int));
那么我应该怎么做才能将numline传递给这个函数?
答案 0 :(得分:3)
听起来好像只是想要:
swapEndian( (char*) &numLine, sizeof(int) );
答案 1 :(得分:3)
已建议的char *演员将起作用
swapEndian( (char*) &numLine, sizeof(int) );
...但是如果你可以改变swapEndian来获取void *它会更好,因为它避免了需要转换(这基本上是无效指针的意思)并且还避免任何潜在的问题或潜在的未来问题要做与铸造操作本身......
答案 2 :(得分:0)
如果swapEndian
适用于每个指向对象的指针,那么您可以传递指针,因为根据严格的别名规则,无论指向对象的类型如何,指向字符类型的指针都可以取消引用。你只需要一个类型转换。
swapEndian((char *)&numLine, sizeof numLine);
C11(n1570),§6.5表达式
对象的存储值只能由左值访问 具有以下类型之一的表达式:
- 与对象的有效类型兼容的类型,
- 类型的合格版本 与对象的有效类型兼容,
- 一种类型 有效类型对应的有符号或无符号类型 对象,
- 对应的有符号或无符号类型的类型 对象的有效类型的限定版本,
- 一个 包含上述类型之一的聚合或联合类型 其成员之间(包括递归地,分组成员) 或包含联盟),或
- 字符类型。
答案 3 :(得分:0)
除了其他答案之外,假设swapEndian
做了它的名字,我相信它被错误地宣布了。我建议宣布它(如果可以的话)
void swapEndian(void *pElement, size_t uNumBytes);