【发布时间】:2015-12-14 19:56:50
【问题描述】:
我在 C/C++ 编程方面经验不足,所以我要求解释。
我有如下声明的全局数组。 ASAK 它位于进程内存上下文中已初始化全局内存的单独内存部分。
Sensor sensorsArray[SENSORS_COUNT] = {dhtTempSensor, dhtHumSensor, dallasTempSensor, waterLevelSensor};
我需要在这个数组中找到元素并返回指向它的指针(因为我要改变它的值)。我写过这样的功能。
Sensor* getSensorById(uint32_t id) {
for (int i = 0; i < SENSORS_COUNT; i++) {
Sensor* current = &sensorsArray[i];
if (current->sensorId == id) {
return current;
}
}
}
它会正常工作吗,我不确定current指针,它是在堆栈上分配的,所以它在函数范围内,它会在函数结束后从堆栈中弹出吗?否则它将正常工作。
我的意思不是指针(使用 &sensorsArray[i] 获取的数组元素的地址),而是包含 erray 元素地址的当前指针变量,它是否会被弹出。
请建议在这种情况下如何做的最佳方法。 谢谢。
【问题讨论】:
-
我觉得你做的还可以。我只想添加一个'return nullptr;'在函数结束时,以防您找不到给定 ID 的传感器
-
找不到id怎么办?
-
为什么不使用
std::find? -
return current返回current的值,这样就可以了。不允许你做的事情是返回当前地址:return &current将不起作用。 -
@NathanOliver:您的建议是“先学习 C++,而不先学习 C”,对吧?我想知道 fwzfhxhoryfs 的意见...
标签: c++ c arrays pointers memory