字符串奇怪的错误

时间:2015-11-06 10:52:23

标签: c string pointers

我写了这个简单的代码

     void check(uint16_t *m)
     {            
        while(*m!=0x0D)  {
            if(*m==0x43)  //C 0x43
            {
                ... do something
            }
            *m++;
        } 
     }

....   //在主

      {
         uint16_t buffer[2]; 
         ......
         check(&buffer);
      } 

现在我在功能检查中有这个警告,

  

注意:预期uint16_t *但参数类型为uint16_t (*)[2]

我不明白为什么编译器会给我这个错误。

3 个答案:

答案 0 :(得分:1)

由于buffer已经是两个uint16_t的数组,您需要将uint16_t *传递给check(),那么您需要做的就是传递数组本身(因为它只会衰减到指向第一个元素的指针)。

所以,改变:

   check(&buffer);

为:

   check(buffer);

答案 1 :(得分:1)

您不需要传递地址,只需传递buffer本身。

check(buffer);

这样做。

因为在函数中它会衰减到指向数组的第一个元素,因此,当你传递buffer的地址时,它变成指向类型为int16_t (*)[2]的数组的指针。

因此,当您传递函数不期望的&buffer时,编译器会发出错误。

答案 2 :(得分:1)

在您的代码中,$.getJSON("Edit/" + data, function (result) { if(result.success){ console.log(result.data); } else { console.log(result.message); } }) 是一个数组类型,buffer的类型是指向数组的指针,如&buffer

OTOH,你的函数需要一个指向变量的类型指针的参数,比如uint16_t (*)[2]

数组名称本身归结为第一个元素的地址,因此只提供指向变量的指针。从函数调用中删除uint16_t *,编译器会很高兴。