C++ 如何检测数组的结尾?

C++ 如何检测数组的结尾?,c++,arrays,pointers,arduino,C++,Arrays,Pointers,Arduino,我编写了一个类,在这个类中,我给出了一个指向数组第一个元素的指针。我不知道这个的大小,但我需要知道我什么时候有最后一个元素 目前,我为该方法提供了一个额外的变量,该变量包含该方法的大小。我想把它去掉 我的方法: #define NOP //__asm__("nop\n\t") //Setup the objekt SR::SR(int DS, int SHCP, int STCP){ pinMode(DS, OUTPUT); pinMode(SHCP, OUTPUT); pinMo

我编写了一个类,在这个类中,我给出了一个指向数组第一个元素的指针。我不知道这个的大小,但我需要知道我什么时候有最后一个元素

目前,我为该方法提供了一个额外的变量,该变量包含该方法的大小。我想把它去掉

我的方法:

#define NOP //__asm__("nop\n\t")

//Setup the objekt
SR::SR(int DS, int SHCP, int STCP){
  pinMode(DS, OUTPUT);
  pinMode(SHCP, OUTPUT);
  pinMode(STCP, OUTPUT);
  this->_DS = DS;
  this->_SHCP = SHCP;
  this->_STCP = STCP;
}

//!!!!!!!!!!at "*muster" you have to send an pointer on the first element of an Array!!!!!!!!!!!

//to shift a Muster in the register

void SR::musterIn(bool *muster, int length){
  for(int i=0; i<length; i++){
    //set datapin
    digitalWrite(_DS, *(muster+i));

    //shift in register memory
    digitalWrite(_SHCP, HIGH);
    NOP;
    digitalWrite(_SHCP, LOW);
  }

  //set to output
  digitalWrite(_STCP, HIGH);
  NOP;
  digitalWrite(_STCP, LOW);
}
谢谢,
Flo

没有其他方法可以将长度信息传递给函数。指向数组的指针显示在开始处,但没有“附加”长度。可以将长度作为参数、结构或类对象的成员或全局变量传递。或者,您可以使用具有结构或类的库将指针和长度捆绑在一起。在数组知道其大小的语言中,数组不是简单的指针,而是结构或类

如果您想使用一个带有一些漂亮数组实现的库,它将长度与指针捆绑在一起以传递给库的函数,那么请考虑库的用户是否会喜欢这种库依赖关系


注意:数据的长度和分配内存的大小是两件不同的事情。如果该函数应该读取该数组,那么我们将传递长度,数组中的项目计数。如果函数应该写入数组,我们通常会传递数组的大小。如果你有一个数组的引用,那么编译器知道大小,你可以在编译时使用它。

C不支持类,即C和C++不是同一种语言。我想把它去掉。为什么?这取决于,您可以通过引用传递C数组,并使用sizeofar/sizeofar[0]查找它们的长度。您可以做的另一件事是将长度打包到一个结构中,并通过引用传递该结构。然而,没有任何实际或理智的理由去做这两件事。如果你有一个指向数组第一个元素的指针,它的长度,并且你想传递数组进行迭代,那么你已经有了一个理想的函数。要检测指针传递给第一个元素的数组的结尾,你基本上需要知道它的大小,或者将另一个指针传递到最后一个或超过最后一个元素的指针。更常见的是编写muster[i],而不是*muster+i