我正在研究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已经用类型声明了。
答案 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
数组的地址在运行时才会知道。