【问题标题】:How i can find the length of array pointer? [duplicate]我怎样才能找到数组指针的长度? [复制]
【发布时间】:2021-12-04 05:51:53
【问题描述】:

这是我返回数组指针的函数。

#include<bits/stdc++.h>
using namespace std;

int *mergeArray(int a[], int b[], int as, int bs){
    int* temp=new int[as+bs];
    int i{0}, j{0}, k{0};
    while(i<as&&j<bs){
        if(a[i]<b[j]) temp[k++]=a[i++];
        else temp[k++]=b[j++];
    }
    while(i<as) temp[k++]=a[i++];
    while(j<bs) temp[k++]=b[j++];
    
    return temp;
}

这是我的主要功能。我通过调用 mergeArray 函数来合并排序后的数组。我想在合并后找到主数组的长度。当我试图找到数组大小但我得到 8 作为输出但值应该是 14 时。当我使用 sizeof 时,我正在获取 int 数据类型的大小除以合并数组的第一个数据,即((size of int data type)/arr[0]);

int main(){
    int arr1[]={3, 6, 8, 10, 15};
    int arr2[]={1, 5, 12};
    int arr3[]={4, 8, 15, 16};
    int arr4[]={2, 6};
    int s1=sizeof(arr1)/sizeof(arr1[0]);
    int s2=sizeof(arr2)/sizeof(arr2[0]);
    int s3=sizeof(arr3)/sizeof(arr3[0]);
    int s4=sizeof(arr4)/sizeof(arr4[0]);
    int range[min(s1,min(s2, min(s3, s4)))*4];
    int *arr= mergeArray(arr1, (mergeArray(arr2, (mergeArray(arr3, arr4, s3, s4)), s2, s3+s4)), s1, s2+s3+s4);
    cout<<sizeof(arr)/sizeof(arr[0])<<" ";
}

【问题讨论】:

  • 请不要滥用粗体字,也不要用 C 标签标记 C++ 问题。
  • 你不能。指针不包含此信息。但你知道s1+s2+s3+s4。您可以改用std::vector。为什么还要在 C++ 中使用 C 数组?
  • 注意:sizeof(arr)/sizeof(arr[0])指针 的大小除以 int 的大小。 sizeof(arr1)/sizeof(arr1[0]);array 的大小除以 int 的大小。数组不是指针。指针不是数组。
  • 如果您想从编码网站学习 C++,请不要这样做。更喜欢由专业人士撰写的good books

标签: c++ arrays pointers


【解决方案1】:

如果使用裸指针,那么您必须显式地传递它们所指向的对象的大小。

但是,由于您使用的是 C++,因此您的问题的实际答案是使用 std::vector 而不是裸指针数组。使用std::vector 你的原始代码变成了

#include <vector>
#include <iostream>

template<class T>
std::vector<T> mergeArray(
     std::vector<T> const a,
     std::vector<T> const b )
{
    std::vector<T> r(a.size() + b.size());

    auto a_it = a.begin();
    auto b_it = b.begin();
    auto r_it = r.begin();

    while( a_it != a.end()
        && b_it != b.end()
        && r_it != r.end()
    ){
        *r_it++ = *a_it < *b_it ? *a_it++ : *b_it++;
    }

    while( a_it != a.end()
        && r_it != r.end()
    ){ *r_it++ = *a_it++; }


    while( b_it != b.end()
        && r_it != r.end()
    ){ *r_it++ = *b_it++; }

    return r;
}

int main(){
    std::vector<int> arr1={3, 6, 8, 10, 15};
    std::vector<int> arr2={1, 5, 12};
    std::vector<int> arr3={4, 8, 15, 16};
    std::vector<int> arr4={2, 6};
    auto arr = mergeArray(
        arr1,
        mergeArray(
            arr2,
            mergeArray(arr3, arr4)
        )
    );

    std::cout << arr.size() << std::endl;

    return 0;
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多