数组到指针的转换.如何在C++中找到数组的大小
Array to pointer conversion. How to find the size of array in C++?
我正试图找出数组的大小。但与其给它5分,不如给它2分。这是不对的。查找数组大小的公式如下。int size = sizeof(pArr)/sizeof(int);
您可以在此处查看工作代码。为了方便起见,代码如下所示。
#include <iostream>
void printArray(int* pArr){
//find size of the array. It should be 5 but
//below it is calculating it 2. Why?
int size = sizeof(pArr)/sizeof(int);
std::cout << "sizeof pArr: " << size << "n";
for(int i=0; i<size; i++){
std::cout << *(pArr+i);
}
}
int main(){
int another[] = {1,2,3,4,5};
printArray(another);
for(int j=0; j<5; j++){
// std::cout << arr[j]<< "n ";
}//end for
}//end main
没有。一旦数组到指针的转换发生,大小信息就消失了。如果您需要它,您必须将大小作为一个单独的参数传递。
由于pArr
是指针,因此sizeof(pArr)
给出了指针的大小。您的指针大小似乎是int
的两倍;例如,x86-64就是这样。
保留大小的一种选择是将处理函数转换为基于数组大小参数化的函数模板:
template <std::size_t N>
void printArray(int (&arr)[N])
{
for (std::size_t i = 0; i < N; ++i) {
std::cout << arr[i];
}
}
请注意,这意味着您通常需要在头文件中实现模板,并且您将为每个调用它的数组大小获得一个实例化。而且它只能用实际的C样式数组调用。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '