這個問題在這里已經有了答案: 從指標 C 獲取陣列的大小 (5 個回答) 3 天前關閉。
這是我回傳陣列指標的函式。
#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])<<" ";
}
uj5u.com熱心網友回復:
如果使用裸指標,則必須明確傳遞它們指向的物件的大小。
但是,由于您使用的是 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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/324914.html
上一篇:C中的init()函式呼叫
