繁体   English   中英

通过 C++ 中的函数传递未大小的数组 [重复]

Passing Unsized Array through function in C++ [duplicate]

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试初始化一个动态数组并将其传递给一个函数,但每次这样做时我都会遇到错误。

float addLayer(float layers[]){
    float addColor = 0;
    if (std::find(std::begin(layers), std::end(layers), addColor)){
        // run code
        addColor = ...;
    }
    return addColor
}

float layers[] = {0};
newColor = addLayer(layers[]); //line 2

我收到的错误:

Expected identifier or '(' on line 2

任何帮助将不胜感激,谢谢

2 个回复
float addLayer(float layers[]);

相当于

float addLayer(float* layers);

即所有你有的是指针。 一旦数组衰减到指针,所有长度信息都会丢失。

要保留长度信息,您可以在单独的参数中传递它,或者,您可以传递对数组的引用:

template <size_t N>
float addLayer(float(&layers)[N]); // pass reference to array of length N

此外,还有一个语法错误:

newColor = addLayer(layers[]);
//                        ^^

图层已经一个数组(但衰变为指针,如果传递给函数指针的版本),你实际做上述线路将索引操作的阵列-但没有说法(注:在争论,你会得到一个浮点值,不再是指针)。

最后: std::array (固定大小)和std::vector (可变大小)都是原始数组的更好替代品,尽可能使用其中之一。

问题是你不能将 C 数组作为参数传递给函数——C 不允许这样做,所以 C++ 也不允许。 如果将函数声明为将 C 数组作为参数,编译器会默默地将其更改为指针,因此您实际上是在传递指针。 因此,对该指针参数调用 std::begin 和 std::end 将不起作用。

为了在 C++ 中完成这项工作,您需要改用std::arraystd::vector

1 将数组传递给C ++中的函数并查找大小[重复]

这个问题已经在这里有了答案: 传递给C ++函数的数组的大小? [重复] 7个答案 我对数组如何传递给函数感到困惑。 在此代码中.. 我得到的输出是 8 1个 有人可以解释为什么会这样吗? ...

2 传递给C ++函数的数组大小? [重复]

可能重复: 如果传递给函数,则确定数组的大小 如何获得传递给函数的C ++数组的大小? 在以下代码中, sizeof(p_vertData)不返回正确的数组大小。 我究竟做错了什么? ...

4 如何将数组大小传递给C ++中的函数

只是我想问一下如何传递数组大小来抛出函数来设置我的游戏记录的大小我唯一的原因是我不使用向量因为我将这个记录基于PMI lib并且它不支持C ++ Constrainers因为它写的C这就是我使用数组的原因 ...

6 数组大小未传递给函数[重复]

这个问题已经在这里有了答案: 如何找到数组的长度? 25个答案 当将数组传递给函数并在函数中使用sizeof()时,它仅返回单个元素的大小(4)。 有没有办法解决这个问题? 而且我仅限于使用数组,而不能使用向量/模板。 输出: ...

9 将数组传递给函数c ++? [重复]

这个问题已经在这里有了答案: 了解指针和局部作用域[重复] 4个答案 我想从用户输入中读取一些数字,然后在每行显示5。 我的代码是这样的: 但是,当我尝试打印它们时,我得到了一些我认为是内存位置的怪异数字。 如何打印数组,以及如何编写返回数组的函数? ...

10 在C ++中传递固定大小的数组?

基本上我想做那样的事情: 但这在C ++中似乎不合法。 我知道我可以使用向量,但是因为我知道数组的大小是常数,所以似乎可能会发生性能损失。 如果可以的话,我也想避免使用new ,因为在堆栈上分配东西更容易,也可能提高性能。 这里有什么解决方案? ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM