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; 
         }