了解在将数组传递给没有大小的函数时丢失的信息
Understanding the information lost while passing array to a function without its size
可能重复:
查找int数组的大小
我很好奇为什么在这个简单的C++代码中会出现以下行为。
在这篇文章中,我试图在两个不同的地方计算浮点数组的大小:
#include <iostream>
#include <iomanip>
using namespace std;
void foo(float a[])
{
int size = sizeof(a) / sizeof(float) ;
cout << size <<std::endl;
}
int main(int argc, char *argv[])
{
float a[] = {22.2, 44.4, 66.6} ;
int size = sizeof(a) / sizeof(float) ;
cout << size <<std::endl;
foo(a);
return 0;
}
使用gcc
编译器,我得到的输出
~: ./a.out
3
2
~:
对于其他数组大小,我得到的第一个条目是正确的大小,但第二个总是2,
现在,在我的代码中,如果我使用数组,并且我通常使用std::vectors,那么我永远不会传递没有大小的数组。但我很好奇这里发生了什么。
"a"在传递给函数时丢失了哪些信息?
(a)计算的第二个大小是多少?
第二个sizeof()正在计算:sizeof(float*) / sizeof(float)
。函数foo
的参数只是指向数组的第一个成员的指针,它与float*
类似(EDIT:相同)。因此,sizeof(array)将为您提供指向第一个成员的指针的大小,无论数组是int[]、float[]还是char[]。
在这里测试后,您可以看到第二个结果是1。我怀疑(不完全确定)你的foo参数有指针衰减,所以它计算sizeof(float*)
,而不仅仅是float
相关文章:
- 如何修复函数中的 fstream 文件输入以将正确的信息存储在结构数组中?
- 如何获取有关在 Clang LibTooling 中调用析构函数的信息?
- 错误:调用'strcmp'没有匹配函数(尝试设置显示用户信息功能)
- 我的单例中的数组在离开函数后没有保留信息,然后在尝试再次访问信息时崩溃
- 使用一个回调函数从多个订阅者分配信息
- 类中的重载函数(Students())是输出输入的信息,但它不起作用
- 是否存在与 Eigen::Matrix<>constexpr 构造函数相关的信息?
- 如果构造函数从调用到 std::make_shared 崩溃,GDB 是否可以显示崩溃的详细信息
- 使用友元函数从多态类中检索类型信息
- Windows表单如何使用其他函数回调图表信息
- 如何在函数模板中隐式推导数组中元素的类型信息
- 函数从模板参数中获取字段值,而不是直接访问以允许对相同信息使用不同的名称
- 多映射插入键类型信息 std::make_pair vs std::p air 构造函数
- LDAP函数中是否有任何功能可以在不使用ldap_search的情况下获取用户信息
- 获取有关 ELF 中的函数和相关符号的信息
- 当所有信息都在头文件中时,未定义对函数的引用
- 将信息从运行函数发送到另一个
- 如何根据其ARITY(或编译时已知的其他信息)以不同的方式调用函数对象
- C 调用从TXT文件输出信息的函数
- 如何从C++dll中提取函数信息