将int传递给期望char *的函数

时间:2012-11-09 13:37:31

标签: c linux

我想将int传递给期望char *

的函数

函数标题如下所示:

void swapEndian(char *pElement, unsigned int uNumBytes)

并使用int调用该函数(我知道,这不起作用..)

int numLine;
swapEndian(numLine, sizeof(int));

那么我应该怎么做才能将numline传递给这个函数?

4 个答案:

答案 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);