使用指针获取数组的长度

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

请参阅以下示例

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 

(这是来自Arduino Code的一个小贴士 – 对不起,我不“说”真正的C)。

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

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

选择以上之一。

还在这里做一个Arduino项目……互联网上的每个人似乎都坚持认为这是不可能做到的……然而本书中最古老的技巧似乎与null终止数组一样好用……

char指针的示例:

  int getSize(char* ch){ int tmp=0; while (*ch) { *ch++; tmp++; }return tmp;} 

魔法…

  • 如果您有数组变量,则可以推断数组的长度。
  • 如果只有一个指向它的指针,则无法推断数组的长度。

你不能,你不应该尝试使用指针算法推断数组长度

如果在C ++中使用vector类

你可以指向整个数组,而不是指向第一个元素,如:

 int testInt[3]; int (*point)[3]; point = testInt; printf( "number elements: %lu", (unsigned long)(sizeof*point/sizeof**point) ); printf( "whole array size: %lu", (unsigned long)(sizeof*point) );