【问题标题】:Count size of two dim array created as double pointer创建为双指针的两个暗淡数组的计数大小
【发布时间】:2019-10-08 23:32:26
【问题描述】:

我在计算这个数组的列数或行数时遇到问题(没关系,因为它总是方阵),创建如下:

    float **arr1 = new float*[3];

    for (int i = 0; i < 3; i++){
        arr1[i] = new float[3];
    }

    for (int i = 0; i < 3; i++){
        for (int i = 0; i < 3; i++){
            arr1[i][j] = i;
        }
    }

我尝试了很多选项,但我总是得到结果:1,例如:

    sizeof(arr1[0])/sizeof(arr1[0][0]);

如果您知道解决方案,请与我分享。

【问题讨论】:

  • 指针的大小是指针本身的大小,而不是它可能指向的大小。改用std::vectorstd::array,就不会有这样的问题了。
  • 答案是你不能。如果您必须在 std::vector 等容器类上使用此类构造,则需要传递维度。 c++ 中的 sizeof() 是一个编译时间常数。在这种情况下,它将返回指针的大小。
  • drescherjm:写一个答案,我给你一个解决方案标记。

标签: c++ arrays pointers sizeof


【解决方案1】:

sizeof() 只会返回指针的大小。

只有一种方法可以获取数组的大小。创建一个包装原始数组的类/结构并且也包含它的大小。

幸运的是,您不必创建这样的结构,因为从 C++11 开始,您可以使用 std::array 为您完成它,这正是您所需要的。您可以按如下方式重写您的示例:

std::array<std::array<float, 3>, 3> square; // size 3x3

    for(size_t i = 0; i < square.size(); ++i)
    {
        for(size_t j = 0; j < square[0].size(); ++j)
            square[i][j] = i;
    }

size() 方法为您提供内部数组的大小。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    相关资源
    最近更新 更多