C++ 获取传递给另一个函数时数组的长度 int*getNewArray(int-arr[] { int-newArray[15]; int len=sizeof(arr)/sizeof(arr[0]); 你有两个问题:
首先,数组具有自动存储。自动对象在作用域结束时自动销毁。因此,函数返回后数组不再存在。返回指向函数后不存在的数组第一个元素的指针。返回的指针始终无效,因此没有用C++ 获取传递给另一个函数时数组的长度 int*getNewArray(int-arr[] { int-newArray[15]; int len=sizeof(arr)/sizeof(arr[0]); 你有两个问题:,c++,C++,首先,数组具有自动存储。自动对象在作用域结束时自动销毁。因此,函数返回后数组不再存在。返回指向函数后不存在的数组第一个元素的指针。返回的指针始终无效,因此没有用 其次,没有通用的方法根据指向该数组元素的指针来知道指针的大小。通常,您会将数组的大小与指针一起传递 sizeof(arr)=8(在64位系统上)。它是一个普通指针 sizeof(arr[0]0=4(如果int为32位) 因此,2 使用std::vector或std::array我猜优化的代码会像这样,通过使用std::vector来保持
- sizeof(arr)=8(在64位系统上)。它是一个普通指针
sizeof(arr[0]0=4(如果int为32位)
因此,2
使用std::vector或std::array我猜优化的代码会像这样,通过使用std::vector来保持实际的功能 有关更多详细信息,我将推荐此链接
#包括
#包括
使用名称空间std;
矢量getNewArray(矢量和arr)
{
int*newArray=newint[15];//在堆中创建大小为15的数组
int len=arr.size();
std::cout一旦数组衰减为指针,您就无法获取其长度。大小丢失。首选std::array
而不是原始数组。不相关,但您无法按原来的方式返回数组。您将得到一个悬空引用。这是否回答了您的问题?
int *getNewArray(int arr[])
{
int newArray[15];
int len = sizeof(arr) / sizeof(arr[0]);
std::cout << len;
return newArray;
}
int main()
{
int arr[3] = {1, 2, 3};
int * newArr = getNewArray(arr);
return 0;
}
#include<iostream>
#include<vector>
using namespace std;
vector<int > getNewArray(vector<int >& arr)
{
int *newArray = new int[15];//creating an array of size 15 in heap
int len = arr.size();
std::cout << len;
return newArray;
}
int main()
{
vector<int > arr = {1, 2, 3};
vector<int > newArr = getNewArray(arr);
return 0;
}