Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在数组中存储';这是一个指针_C++_Arduino - Fatal编程技术网

C++ 在数组中存储';这是一个指针

C++ 在数组中存储';这是一个指针,c++,arduino,C++,Arduino,我想在数组中存储一个元素,因为给定数组的参数是指向实际数组的指针(以防止不必要地复制数据) bool存储元件阵列(传感器元件,传感器*传感器){ 对于(int i=0;i时,C++缺少内置内存视图原语。code>std::vector用于桌面代码,但在有限MCU的嵌入式程序中使用它是相当值得怀疑的。在这种情况下,您可能需要/希望编写包含指针和大小的自己的类型,例如: template<typename T> struct ArrayView { T* ptr; std

我想在数组中存储一个元素,因为给定数组的参数是指向实际数组的指针(以防止不必要地复制数据)

bool存储元件阵列(传感器元件,传感器*传感器){
对于(int i=0;i<(sizeof(传感器)/sizeof(元件)-1);i++){
如果(!sensors[i].getIsObject()){//检查当前元素是否已经是“真实”传感器,或者只是存储传感器的内存保留部分
helper::debug(F(“存储在索引中”),false,false);
helper::debugInt(i,true,false);
传感器[i]=元件;
打破
}
}
}
传感器[5];
我想将
元素
存储到
传感器
,而
传感器
应该只作为数组
传感器[5]
的指针/引用,因为我需要指定元素应该存储到哪个数组。如何实现这一点?

数组的“指针/引用”似乎指出了理解指针如何与数组相关时的一些问题

当您将指针指向数组元素,并将数组“传递”给这样的函数时,您触发了数组到指针的衰减,最终传递的是指向第一个元素的指针

#include <iostream>

void f(int* p) {
    std::cout << p << '\n';
}

int main() {
    int arr[5];

    // both are exactly the same
    f(arr); 
    f(&arr[0]);
}
也就是说,如果要传递数组,则需要某种方法来评估大小,以避免越界访问;一种方法是将其作为另一个参数传递

也就是说,最好使用
std::array
,然后将其作为引用传递。这样你就避免了所有的指针把戏,并自动传递了大小。缺点是您需要在编译时知道大小

不幸的是,在提供 STD::StrigyVIEW//COD>时,C++缺少内置内存视图原语。code>std::vector用于桌面代码,但在有限MCU的嵌入式程序中使用它是相当值得怀疑的。在这种情况下,您可能需要/希望编写包含指针和大小的自己的类型,例如:

template<typename T>
struct ArrayView {
    T* ptr;
    std::size_t sz;
public:
    template<int arrSize>
    ArrayView(T (&arr)[arrSize]) : ptr(arr), sz(arrSize) { }

    T& operator[](int i) { return ptr[i]; }
    std::size_t size() const { return sz; }
};
模板
结构阵列视图{
T*ptr;
标准::尺寸t sz;
公众:
样板
ArrayView(T(&arr)[arrSize]):ptr(arr),sz(arrSize){
T&运算符[](int i){return ptr[i];}
std::size_t size()常量{return sz;}
};

指针的大小是指针本身的大小,而不是它可能指向的大小。当您需要将“数组”传递给函数时,请始终将大小作为参数包含在内。很好,谢谢!
#include <iostream>
#include <algorithm>

void set(int val, int ix, int* storage) {
    storage[ix] = val;
}

int main() {
    int values[10];
    std::fill(std::begin(values), std::end(values), 0);

    set(42, 3, values);

    for (auto v : values) {
        std::cout << v << '\n';
    }
}
template<typename T>
struct ArrayView {
    T* ptr;
    std::size_t sz;
public:
    template<int arrSize>
    ArrayView(T (&arr)[arrSize]) : ptr(arr), sz(arrSize) { }

    T& operator[](int i) { return ptr[i]; }
    std::size_t size() const { return sz; }
};