下面用于合并两个数组的代码,在第5-6行,为什么编译正常,而其他显示错误“Intializer无法确定结果的大小”
void Merge(int first[],int second[],int f_length,int s_length){
int total_length=f_length+s_length;
int f_count=0;
int s_count=0;
**int result[total_length]**;//this is working fine
*int result[]=new int[total_length]*;//Generating compiler error
for(int i=0;i<total_length;i++){
if(first[f_count]<second[s_count] && f_count<f_length)
result[i]=first[f_count++];
else
result[i]=second[s_count++];
}
for(int i=0;i<total_length;i++)
cout<<result[i]<<endl;
}
答案 0 :(得分:1)
在C ++中定义数组要求它的大小在编译时是一个常量表达式。所以这个定义
int result[total_length];
无效,因为total_length不是常量表达式。
如果您的意思是以下行
int result[]=new int[total_length];
然后正确的语法是
int *result = new int[total_length];
编译器报告错误,因为它无法从表达式
确定数组的大小new int[total_length]
由于使用了无效的语法构造。
除此之外,您的功能无效。您不检查s_count是否超过s_length。即使是这种无效的条件
if(first[f_count]<second[s_count] && f_count<f_length)
应至少写成
if ( f_count<f_length && first[f_count]<second[s_count] )
因为您可能无法取消引用指向数组最后一个元素之外的指针。这首先取消引用指针first[f_count]<second[s_count]
,并且只有在检查它是否是数组f_count<f_length
中最后一个元素之后的元素之后