Arduino全局变量不在循环函数的范围内

时间:2018-01-02 15:44:12

标签: pointers scope arduino arduino-esp8266

我正在研究esp8266模块的一些代码并遇到了一些问题。

以下是我如何声明指向clients数组的指针。我在设置之前执行此操作,这意味着这些变量也在循环范围中被识别,我是对的吗?

WiFiClient clients[10];
*WiFiClient p;
p = &clients[0];

在loop()函数中的这部分代码中,我使用指针来检查clients数组的每个元素。

for(int i=0; i< sizeof(clients); i++){
  if(*(p+i) == client){
    contain = true;
    break;      
  }  
}

此代码的目标是拥有一个包含当前所有连接的WiFiClient的数组,并查看当有een client.available()时,该客户端是否已在数组中。 稍后我们再次浏览数组以读取每个客户端的所有消息。 但编译会出现此错误: 错误:'p'未在此范围内声明

   if(*(p+i) == client){

我觉得这很困惑,因为它应该在范围内。我的宣言可能有问题吗?

最初我有这样的话:

WiFiClient clients[10];
WiFiClient *p;
p = &clients[0];

但是又出现了另一个错误: 错误:'p'没有命名类型

p =&amp; clients [0];

但如果我给了p一个类型,它会说p已经用类型声明了。

1 个答案:

答案 0 :(得分:0)

我不太了解你在使用数组做什么,但为了解决你的问题,你需要{for循环前的US/Eastern行:

p = &clients[0];

WiFiClient clients[10]; *WiFiClient p; void loop() { // other stuff p = &clients[0]; for(int i=0; i< sizeof(clients); i++){ if(*(p+i) == client){ contain = true; break; } } } 已在全局范围内声明,但p数组的地址在运行时才会知道。