X和Y的值是什么,为什么不同
What is the value of X and Y ?.why it is different?
#include <iostream>
using namespace std;
int function(int arr [])
{
int y = sizeof(arr)/sizeof(arr[0]);
return y;
}
int main ()
{
int arr[] = {1,2,3,4,5,6};
int x = sizeof(arr)/sizeof(arr[0]);
cout <<x<<"n";
int y=function(arr);
cout <<y<<"n";
return 0;
}
int arr[] = {1,2,3,4,5,6};
int x = sizeof(arr)/sizeof(arr[0]);
在这种情况下arr
是一个由 6 个 int 元素组成的数组。 int
的sizeof
是 4 个字节,因此sizeof(arr)
是 24,除以单个整数的 sizeof
等于 6。
int function(int arr [])
{
int y = sizeof(arr)/sizeof(arr[0]);
return y;
}
在这种情况下,arr
衰减为指向 int 的指针。根据您的平台,指针的sizeof
可能是 4 或 8 个字节。
输出将如下所示:
6
1
解释:
在main()
函数内计算x
时,arr
是一个数组。因此,sizeof(arr)
返回整个数组的大小(以字节为单位)。
int x = sizeof(arr) / sizeof(arr[0]);
// 24 / 4 = 6 (assuming your compiler assigns 4 bytes to an integer)
但是,当您将相同传递给函数时,作为参数传递的是指向数组的指针。因此,这本质上就像将int *arr
传递给函数一样。
来源: C++ 数组大小
相关文章:
- 为什么此指针值不能转换为整数的规则是什么?
- 通过构造函数方法输出的类到类类型转换是 5500 为什么不是 5555
- 为什么左值不能改变自己。左值用户是什么意思?
- 在发布模式下崩溃,但如果可调试为 true - 不是..什么是可能的问题
- 为什么不是条件 *First1 == * First2 ??(C++ STL 包括函数实现)
- 有什么理由为什么“std::exchange”不是“constexpr”
- 为什么不是 std::iota constexpr?
- 为什么我会遇到细分错误?将输出作为数字而不是字符串的原因是什么?
- 为何分配给基本呼叫的结果,为什么不是编译器错误
- std::反向使用反向迭代器,为什么不是无操作?
- 为什么是下面的's.clear(ios::badbit);?为什么不是's.clear(ios::failbit);'
- 为什么在C语言的标题中使用"#"符号?为什么不是任何其他符号?
- 为什么不是 std::swap 在全局命名空间中
- 例外C++,我只是不明白为什么输出是什么
- 为什么不是所有的DLL模块我可以加载(打开)
- 默认的默认构造函数,为什么不是用户提供的默认构造函数
- 为什么不是只有一个?复制构造函数和赋值操作符
- 为什么不是't使用#define来隐藏在此处工作的unique_ptr丑陋
- C++ 为什么不是同一个地址(指针)
- std::chrono::...::time_point上的构造函数应该不是例外吗?(或者为什么不是?