C++11获取作为函数引用传递的数组大小错误[重复]

ztmd8pv5  于 2023-02-01  发布在  其他
关注(0)|答案(1)|浏览(134)
    • 此问题在此处已有答案**:

Passing an array by reference(5个答案)
What is array to pointer decay?(11个答案)
3天前关闭。
我有这个代码看起来像sizeof(skyline)返回总是8,当划分它与sizeof(int)是4给我错误的数组大小.代码:

int calcualteSkyLine(const int* skyline)
{
    int arrSize = sizeof(skyline) / sizeof(int);
    for(int i=0;i <=arrSize;i++)
    {
        std::cout << skyline[i] << std::endl;
    }
}

int main(int argv,char** argc)
{
    const int  buldingArry[] = {1,3,2,1,2,1,5,3,3,4,2};
    calcualteSkyLine(buldingArry);
    return 0;
}

arrSize始终为8 ..因此无法打印数组,这里出了什么问题?如果我将"arrSize"替换为10,则所有工作

vsmadaxz

vsmadaxz1#

你的代码在当前的C++中是什么样子的(还有一点额外的,因为我需要一个返回值;)

#include <numeric>
#include <iostream>
#include <vector>

int calcualteSkyLine(const std::vector<int>& skyline)
{
    for(const int value : skyline)
    {
        std::cout << value << "\n";
    }

    // return the sum of all values (another nice thing you can do with numeric/vector)
    // is to avoid (visible) for loops completely
    return std::accumulate(skyline.begin(), skyline.end(), 0);
}

int main(int argv, char** argc)
{
    std::vector<int> buldingArray{ 1,3,2,1,2,1,5,3,3,4,2 };
    auto sum = calcualteSkyLine(buldingArray);
    std::cout << "sum = " << sum;
    return 0;
}

相关问题