如何通过在C ++中的[]中传递变量来定义数组的大小?

时间:2013-10-21 07:37:58

标签: c++ arrays

我的代码如下。我想声明一个大小为n的数组。

FILE *fp;
fp=fopen("myfile.b", "rb");
if(fp==NULL){ fputs("file error", stderr); exit(1); }
int* a;
fread(a, 0x1, 0x4, fp);
int n=*a;
int array[n];  // here is an error 

如何在此代码中声明大小为n的数组?

5 个答案:

答案 0 :(得分:4)

这是variable-length array的声明,它还没有在C ++中。

相反,我建议你改用std::vector

std::vector<int> array(n);

您还有其他问题,例如声明指针但不初始化它,然后使用该指针。当您声明局部变量(如a)时,其初始值为 undefined ,因此使用该指针(除了分配给它)会导致未定义的行为 。在这种情况下,可能会发生的是您的程序将崩溃。

答案 1 :(得分:0)

int *array = (int*)malloc( n * sizeof(int) );
//..
//your code
//..
//..
free(array);

答案 2 :(得分:0)

你不能在C ++中声明一个可变大小的数组,但是一旦你知道你需要多少就可以分配内存:

int * a = new int [n];

//对你的阵列做点什么......

//完成后:

删除[] a;

答案 3 :(得分:0)

因为您的代码看起来更像C ...

FILE *fp = fopen("myfile.b", "rb");

if(fp==NULL)
{ 
  fputs("file error", stderr); 
  exit(1); 
}

//fseek( fp, 0, SEEK_END ); // position at end
//long filesize = ftell(fp);// get size of file
//fseek( fp, 0, SEEK_SET ); // pos at start

int numberOfInts = 0;
fread(&numberOfInts, 1, 4, fp); // you read 4 bytes sizeof(int)=4?
int* array = malloc( numberOfInts*sizeof(int) );

答案 4 :(得分:0)

数组只接受const对象或表达式,这个值可以由编译器在编译时决定,c ++中的向量更适合这种情况,否则我们需要为它动态分配内存。