【发布时间】: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。