C++数组的初始化

我想要从键盘输入值来确定数组大小,要怎么写啊 int A[]; cin>> ;
2025-04-28 17:22:36
推荐回答(4个)
回答1:

在c++ primer fourth edition上在描述数组的初始化时,有这样一句话:

数组的维数必须用值大于等于 1 的常量表达式定义。此常量表达式只能包含整型字面值常量、枚举常量或者用常量表达式初始化的整型 const 对象。非 const 变量以及要到运行阶段才知道其值的 const变量都不能用于定义数组的维数。


但以下测试程序在gcc编译器下,用非const常量作为数组初始化的维数也没有报错,网上查了资料,原来这是C99的标准,C89的版本是不支持非const定义数组维数的,gcc编译器内部做了优化,但没有测试VS编译器下是否通过。

// 以下gcc编译通过  
/*const*/ unsigned int buf_size = 3;  
  
int int_array[buf_size];  
for( unsigned int index = 0; index != buf_size ; index++ ){  
    int_array[index] = index;  
}  
  
for( unsigned int index = 0; index != buf_size ; index++ ){  
    cout << int_array[index];  
    if( index < buf_size - 1 ){  
        cout << "_";  
    }  
}  
cout << endl;

但是用直接初始化数组的方式却不通过编译:error: variable-sized object 'str_array' may not be initialize

unsigned int max_size = 3;  
string str_array[max_size] = {"aa", "bb", "cc"};

针对于此,显示初始化数组,无需指定维数:

string str_array[] = {"aa", "bb", "cc"};

关于字符数组:

// error: initializer-string for array of chars is too long [-fpermissive]  
char arr_1[3] = "abc";      // 维数是4,相当于char arr_1[3] = {'a','b','c','\0'}, '\0'为空字符串  
char arr_2[3] = {'a','b','c'};  // 维数是3

与vector不一样,数组不允许直接复制和赋值

int ia[] = {0, 1, 2};   // ok: array of ints  
int ia2[] = ia;         // error: initializer fails to determine size of 'ia2'  
int ia3[](ia);          // error: initializer fails to determine size of 'ia3'

对于的数组的初始化,如果没有显式提供元素初值,则数组元素会像普通变量一样初始化:

1、在函数体外定义的内置数组,其元素均初始化为 0;

2、在函数体内定义的内置数组,其元素无初始化;

3、不管数组在哪里定义,如果其元素为类类型,则自动调用该类的默认构造函数进行初始化;

4、如果该类没有默认构造函数,则必须为该数组的元素提供显式初始化。

回答2:

有一种方法,就是先输入数组中数的数量

回答3:

#include//头文件
#include

int *a,count=0;
scanf("%d",&count);
a=(int *)malloc(sizeof(int)*count); //free(a);
for(int i=0;iscanf("%d",&a[i]);
......
free(a); //用完数组a 用这句来释放内存

回答4:

通常这样写:
#include
using namespace std;
main()
{
int num,i;
int *A;
cout<<"输入数组的大小"< cin>>num;
A = new int [num];
cout<<"输入数组的元素"< for(i = 0 ; i < num ; i++)
cin>>A[i];
for(i = 0 ; i < num ; i++)
cout< delete [] A;
}

vc tub-c 规定数组的下标不能是变量,动态分配就可以了。
所以如下代码是不正确的:
#include
using namespace std;
main()
{
int num,i;

cout<<"输入数组的大小"< cin>>num;

int A[num];

cout<<"输入数组的元素"< for(i = 0 ; i < num ; i++)
cin>>A[i];
for(i = 0 ; i < num ; i++)
cout<
}

如果你用的编译器比较新,比如g++ 上述代码也是正确的,为了带来不必要的麻烦,最好还是别这样写。