新人求助!DEV C++编译器报错[Error]invalid conversion from 'int*'to'int'[-fpermissive]
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n],lz=0,bh=0,xc[10];
memset(xc,0,sizeof(xc));
for(int i=0; i<n; i++)
{
cin>>a[i];
xc[a[i]]++;
for(int j=0; j<a[i]; j++)
{
xc[j]=0;
}
for(int t=xc+1; t<=10; t++)
{
xc[t]=0;
}
if(xc[a[i]]>lz)
{
bh=a[i];
lz=xc[a[i]];
}
}
cout<<lz;
return 0;
}
第18行的for(int t=xc+1; t<=10; t++) 里的xc是int数组,不能和int型整数混用。这个题目是求什么?
还可以这么写
for(int * t=xc+1; t<=xc+10; t++)
{
*t=0;
}
【以下回答由 GPT 生成】
问题是由于int a[n]这行代码引起的。在标准C++中,数组的大小必须是一个常量表达式,即编译时可确定的值。但是在这里,变量n的值在运行时才能确定,因此编译器会报错。
要解决这个问题,可以使用动态内存分配来替代数组的声明。具体步骤如下:
int *a = new int[n];
这将在堆上动态分配一个大小为n的int数组,并将指针a指向该数组。
修改你对a的引用,以反映这个改变。例如,将cin>>a[i]改为cin>>*(a+i)。
在程序结束前,使用delete[]来释放动态分配的内存。在return 0;之前,添加以下代码:
delete[] a;
这样做可以确保在程序运行结束时释放内存,避免内存泄漏。
修改后的代码如下所示:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int n;
cin>>n;
int *a = new int[n];
int lz=0,bh=0,xc[10];
memset(xc, 0, sizeof(xc));
for(int i=0; i<n; i++)
{
cin>>*(a+i);
xc[*(a+i)]++;
for(int j=0; j<*(a+i); j++)
{
xc[j]=0;
}
for(int t=xc+1; t<=10; t++)
{
xc[t]=0;
}
if(xc[*(a+i)]>lz)
{
bh=*(a+i);
lz=xc[*(a+i)];
}
}
cout<<lz;
delete[] a;
return 0;
}
请注意,由于使用了动态内存分配,因此你需要负责在适当的时候释放内存,以避免内存泄漏。
【相关推荐】