为什么将数组的大小作为参数传递给函数时,数组的大小为何不同

TCG
template <typename list_type>
int len(list_type list) {

    std::cout << sizeof(list);

    return (sizeof(list) / sizeof(list[1]));
}


int main() {

    int list[5] = {1, 2 ,3 ,5 ,4};

    std::cout << sizeof(list) << "\n";
    len(list);
}

当我运行程序时,我得到:20then 4尽管清单相同,为什么会有区别?

沃利

数组衰减为指针。

listint*inlen()int[5]in main

如此处所述,有两个可能的修复:

  • 使用参考
  • 明确使用对数组类型的引用

如果使用引用,它将起作用(指针不会衰减),但是您仍然必须计算元素数:

#include <iostream>

template <typename list_type>
int len(list_type &list) {
    std::cout << sizeof(list) << '\n';
    return (sizeof(list) / sizeof(list[1]));
}

int main() {
    int list[5] = {1, 2 ,3 ,5 ,4};
    std::cout << sizeof(list) << "\n";
    auto element_count = len(list);
    std::cout << "There are " << element_count << " elements in the list.\n";
}

对于第二个选项,您将在编译时获得数组的大小:

#include <iostream>

template <typename list_type, size_t N>
int len(list_type (&list) [N]) {
    std::cout << sizeof(list) << '\n';
    return N;
}

int main() {
    int list[5] = {1, 2 ,3 ,5 ,4};
    std::cout << sizeof(list) << "\n";
    auto element_count = len(list);
    std::cout << "There are " << element_count << " elements in the list.\n";
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过将数组作为参数传递给函数来增加数组的大小

来自分类Dev

将固定大小的数组作为指针传递给函数时的警告

来自分类Dev

为什么C ++允许在运行时将数组大小传递给函数以构造固定大小的数组?

来自分类Dev

数组的大小作为函数的参数传递

来自分类Dev

将数组传递给函数的大小控制

来自分类Dev

在函数外部声明数组大小参数时,为什么不能将其作为变量?

来自分类Dev

将数组作为参数传递给函数

来自分类Dev

LLVM IR:当作为参数传递给函数时,如何在llvm ir代码中获取数组的大小?

来自分类Dev

将数组传递给函数后如何知道数组的大小

来自分类Dev

为什么将char数组作为参数传递给函数并尝试在函数内部进行修改会显示分段错误?

来自分类Dev

将数组作为函数参数传递给setTimeout的行为与传递变量不同

来自分类Dev

传递大小可变的多维数组作为函数的参数

来自分类Dev

为什么“大小”与一组相同的文件不同时,“磁盘大小”为何不同?

来自分类Dev

为什么二维数组传递给函数需要其大小?

来自分类Dev

为什么通过引用传递给函数的数组大小对于C ++的编译器是已知的?

来自分类Dev

在VHDL中,将无约束数组的索引范围作为参数传递给函数/过程时,默认范围是什么?

来自分类Dev

将二维数组的大小传递给函数?

来自分类Dev

将特定大小的数组传递给C中的函数

来自分类Dev

在C语言中,当使用malloc创建2D数组时,为什么在传递给函数时不需要指定2D数组大小?

来自分类Dev

将数组作为函数的参数传递时,c ++获得不同的数组长度

来自分类Dev

当大小未知时,通过引用将字符数组传递给函数

来自分类Dev

为什么不能将作为常量引用传递给函数的数组的 .size() 用作模板参数?

来自分类Dev

将多个数组作为参数传递给函数

来自分类Dev

将数组范围作为参数传递给函数?

来自分类Dev

将多维数组作为参数传递给函数

来自分类Dev

将数组作为参数传递给pick中的函数

来自分类Dev

将参数作为数组传递给PowerShell函数

来自分类Dev

将numpy数组作为参数传递给theano函数

来自分类Dev

将php数组作为链接参数传递给ajax函数

Related 相关文章

  1. 1

    通过将数组作为参数传递给函数来增加数组的大小

  2. 2

    将固定大小的数组作为指针传递给函数时的警告

  3. 3

    为什么C ++允许在运行时将数组大小传递给函数以构造固定大小的数组?

  4. 4

    数组的大小作为函数的参数传递

  5. 5

    将数组传递给函数的大小控制

  6. 6

    在函数外部声明数组大小参数时,为什么不能将其作为变量?

  7. 7

    将数组作为参数传递给函数

  8. 8

    LLVM IR:当作为参数传递给函数时,如何在llvm ir代码中获取数组的大小?

  9. 9

    将数组传递给函数后如何知道数组的大小

  10. 10

    为什么将char数组作为参数传递给函数并尝试在函数内部进行修改会显示分段错误?

  11. 11

    将数组作为函数参数传递给setTimeout的行为与传递变量不同

  12. 12

    传递大小可变的多维数组作为函数的参数

  13. 13

    为什么“大小”与一组相同的文件不同时,“磁盘大小”为何不同?

  14. 14

    为什么二维数组传递给函数需要其大小?

  15. 15

    为什么通过引用传递给函数的数组大小对于C ++的编译器是已知的?

  16. 16

    在VHDL中,将无约束数组的索引范围作为参数传递给函数/过程时,默认范围是什么?

  17. 17

    将二维数组的大小传递给函数?

  18. 18

    将特定大小的数组传递给C中的函数

  19. 19

    在C语言中,当使用malloc创建2D数组时,为什么在传递给函数时不需要指定2D数组大小?

  20. 20

    将数组作为函数的参数传递时,c ++获得不同的数组长度

  21. 21

    当大小未知时,通过引用将字符数组传递给函数

  22. 22

    为什么不能将作为常量引用传递给函数的数组的 .size() 用作模板参数?

  23. 23

    将多个数组作为参数传递给函数

  24. 24

    将数组范围作为参数传递给函数?

  25. 25

    将多维数组作为参数传递给函数

  26. 26

    将数组作为参数传递给pick中的函数

  27. 27

    将参数作为数组传递给PowerShell函数

  28. 28

    将numpy数组作为参数传递给theano函数

  29. 29

    将php数组作为链接参数传递给ajax函数

热门标签

归档