将char数组传递给函数

时间:2017-01-19 06:39:36

标签: c arrays pointers parameter-passing function-call

将数组传递给函数,是否需要使用&

在下面的案例1或案例2中,哪一个好?

#define IP_ADDR_LEN  4 
char ip[4]={192,168,205,1};
char PeerIP[4];
int main()
{
   memcpy(PeerIP,ip,IP_ADDR_LEN)

   testip(PeerIP);   /* Case 1 */

   testip(&PeerIP);   /*Case 2*/
}

int testip(char *ip)
{
  /* IP check */

}

1 个答案:

答案 0 :(得分:2)

第一个。

  testip(PeerIP);

是正确的方法,因为数组名称将衰减为指向数组的第一个元素的指针,该指针与被调用函数参数的预期类型匹配。

详细说明,在您的代码中,testip()需要char *类型的参数,并通过调用它testip(PeerIP);来传递char *,所以没有问题。< / p>

如果你使用&PeerIP,类型将是[char (*) [4]]指向数组的指针,不是指向数组第一个元素的指针[{{1}它们是不同的类型。

引用char *,章节§6.3.2.1,左值,数组和函数指示符,(强调我的

  

除非 C11运算符,sizeof运算符或运算符   一元_Alignof运算符,或者是用于初始化数组的字符串文字,一个表达式   type ''类型''的数组被转换为类型''指向类型''指针的表达式   到数组对象的初始元素,而不是左值。 [...]