我写了一个函数,它采用动态长度数组,但内部数组大小固定,函数中的第二个参数是父数组的长度。然而,当我尝试访问嵌套值时,我会遇到上面提到的问题。
void myFunc(int arrOfArr, int arrOfArrLen) {
// try to access
arrOfArr[0][1]; // expect val2
}
示例用法
myFunc(
{
{val1, val2},
{val3, val4}
},
2
);
编辑:我意识到";上下文地";很明显,整数没有索引,但这就是声明数组的方式。。。(在Arduino上下文中说实话(但显然它仍然是C++
这是谷歌返回的第一个沙盒中的可运行演示
http://cpp.sh/5sp3o
更新
我确实找到了一个解决方案,它很丑陋,但它有效:
而不是传入一个";生的";嵌套数组作为参数,我首先将其设置为变量例如:
int arrOfArr[][3] = {
{val1, val2},
{val3, val4}
}
然后在功能中我做同样的事情
void myFunc(int arrOfArr[][3], int arrOfLen) {
// access
}
称之为
myFunc(arrOfArr, 2);
正如我所说,这很丑陋,但对我来说很有效,这是一个路过的项目,而不是一个低级的开发,也许以后会完全学会,但在日常工作中不需要。
edit:很明显,我最初试图做的事情,例如嵌入一个初始值设定项列表作为参数是行不通的。
如果您想传递嵌套数组,声明可能是:
template<size_t N>
void myFunc(int const arrOfArr[][N], int arrOfArrLen) {
// ...
}
如果已经决定了N
,则可以删除模板参数。
const size_t N = 3;
void myFunc(int const arrOfArr[][N], int arrOfArrLen) {
// ...
}
但是如果您传递一个包含大括号的初始值设定项,它就不起作用了,您可以添加一个重载函数:
template<size_t M, size_t N>
void myFunc(int const (&arrOfArr)[M][N], int arrOfArrLen){
// attention: int *const*
// ...
}