使用指针获取数组的长度

spe*_*ndo 5 c arrays pointers arduino

当我只知道指向数组的指针时,有没有办法获得数组的长度?

请参阅以下示例

int testInt[3];
testInt[0] = 0;
testInt[1] = 1;
testInt[2] = 1;

int* point;
point = testInt;

Serial.println(sizeof(testInt) / sizeof(int)); // returns 3
Serial.println(sizeof(point) / sizeof(int)); // returns 1
Run Code Online (Sandbox Code Playgroud)

(这是来自Arduino Code的一个小贴士 - 对不起,我不"说"真正的C).

Tom*_*rdt 12

简单的答案是否定的,你不能.您可能希望在内存中保留一个变量来存储数组中的项目数量.

并且有一个不太容易的答案.有一种方法可以确定数组的长度,但为此你必须用另一个元素标记数组的结尾,例如-1.然后循环遍历它并找到这个元素.该元素的位置是长度.但是,这不适用于您当前的代码.

选择以上之一.

  • +1这是C糟透了的事情之一.:) (3认同)

小智 5

还在这里做一个 Arduino 项目...互联网上的每个人似乎都坚持认为这是不可能的...然而书中最古老的技巧似乎对空终止数组工作得很好...

字符指针的示例:

    int getSize(char* ch){
      int tmp=0;
      while (*ch) {
        *ch++;
        tmp++;
      }return tmp;}
Run Code Online (Sandbox Code Playgroud)

魔法...

  • 对于 char 数组,您可以使用 strlen() 轻松获取其大小,因为它使用与上面所示相同的方法。但对于数字字符数组来说,你根本做不到。 (4认同)