华硕开机一直在asus:请问如何定义数组的长度为任意?

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 19:19:50
我的意思是如int a[];让用户输入数组长度n;例如n=5;那么数组就为a[5];n=6;那么数组就为a[6].
在C中如何实现?
在Java中又如何实现?

数组类型说明 在C语言中使用数组必须先进行类型说明。
数组说明的一般形式为:

类型说明符 数组名 [常量表达式],……

其中,类型说明符是任一种基本数据类型或构造数据类型。 数组名是用户定义的数组标识符。 方括号中的常量表达式表示数据元素的个数,也称为数组的长度。
例如:
int a[10]; 说明整型数组a,有10个元素。
float b[10],c[20]; 说明实型数组b,有10个元素,实型数组c,有20个元素。
char ch[20]; 说明字符数组ch,有20个元素。

对于数组类型说明应注意以下几点:

1.数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。

2.数组名的书写规则应符合标识符的书写规定。

3.数组名不能与其它变量名相同,例如:
void main()
{
int a;
float a[10];
……
}
是错误的。

4.方括号中常量表达式表示数组元素的个数,如a[5]表示数组a有5个元素。但是其下标从0开始计算。因此5个元素分别为a[0],a[1],a[2],a[3],a[4]。

5.不能在方括号中用变量来表示元素的个数, 但是可以是符号常数或常量表达式。例如:
#define FD 5
void main()
{
int a[3+2],b[7+FD];
……
}
是合法的。但是下述说明方式是错误的。
void main()
{
int n=5;
int a[n];
……
}

6.允许在同一个类型说明中,说明多个数组和多个变量。
例如: int a,b,c,d,k1[10],k2[20];

----------------------------------------------------------------------------------------------------

在JAVA中定义数组:

int[] x; 定义
x=new int[10]; 初始化

java程序中定义数组的操作与其他语言相比有一定的差异,一般说来创建一个java数组需要下面三个步骤。

1、声明数组

声明数组主要是声明数组的名称和数组所包含的元素的数据类型或元素的类名。声明数组的语法格式有两种。

数组元素类型 数组[ ];

数组元素类型[ ] 数组名;

方括号--是数组的的标志,它可以出现在数组的后面,也可以出现在数组元素类型的后面,两种定义方法没有什么差别。下面的例子分别声明了一个整数的数组和一个D200_Card类型的数组:

int MyIntArry[ ];

D200_Card[ ]ArryOf200Card;

2、创建数组空间

声明数组仅仅指定了数组的名字和数组元素的类型,要想真正使用数组还需要位它开辟内存空间,即创建数组空间。与多数语言一样,java不支持变长的数组,所以在创建数组空间时必须指明数组的长度,已确定所开辟的内存空间的大小。创建数组空间的语法格式为:

数组名=new 数组元素类型[数组元素的个数]

上面声明的两个数组可以这样创建空间:

MyIntArray=new int[10];

ArrayOf200Caed=new D200_card[15];

创建数组空间的工作也可以与声明数组合在一起,用一条语句完成。例如:

int MyIntArray[]=new int[10];

D200_Card[]ArrayOf200Card=new D200_Card[15];

对于数组元素类型是基本数据类型的数组,在创建数组空间的同时,还可以同时给出各数组元素的初值,这样可以省略创建空间的new算符。例如:

int MyIntArray[]={1,2,3,4,5,6,7,8,9,10};

这个语句创建了一个包含10个整型元素的数组,同时给出了每个元素的初值。

3、创建数组元素并初始化

如果数组元素的类型是基本数据类型,那么这第三步骤可以自行省略。因为基本数组类型量都有缺省的初值,可以没有专门的创建和初始化数组元素的语句。例如上面的数组MyIntArray[],如果不专门制定初值,那么创建之后,它的每个数组元素都被自动赋值为0,不必再加后续步骤。

对于以某一类对象为数组元素的数组,创建并初始化每个数组元素的步骤却是必不可少的。例如上面的数组ArrayOf200Card,它的每个元素都是一个D200_Card类的对象,在创建对象的同时必须要执行对象的构造函数。例如,D200_Card类的对象的构造函数为:

public D200_Card(long cn,int pw,double b,String c,double a){

cardNumber=cn;

password=pw;

balance=b;

connectNumber=c;

additorFee=a;

}

可见每创建一个D200_Card类的对象,都必须执行这个类的构造函数并给出相应的实际参数来初始化新对象的内部各个属性变量或对象,所以对于数组ArrayOf200Card中的每个元素,必须用一条专门语句来实现创建该元素和执行构造函数初始化该元素的工作,一般用如下的循环完成。

for (int i=0;i<ArrayOf200Card.length;i=i++){

ArrayOf200Card[i]=

new D200_Card(200180000+i,1111,50.0,"200",0.1);

}

这个循环执行的结果将为从ArrayOf200Card[0]到ArrayOf200Card[14]的所有数组元素开辟并分配内存空间。语句中使用的ArrayOf200Card.length是数组ArrayOf200Card的一个整型域,里面保存着数组元素的个数,用来作为循环终止条件非常合适。

比较简单的方法是自己定义一个相当大的就是了(就是大于要求小于硬件极限的大小).
如果是要用户要多少就给多少的话就只能用链表实现数组,这样就可以动态申请内存了.就好了.
简单说下C的实现
用个结构当元素.里面含有一个数据区和一个指针区,比如指向下一个元素.
用户要求后用MALLOC申请新的并且接在链表尾部就是了.

int nSize;
scanf( "%d", &nSize );
int *p = ( int* )malloc( sizeof( int ) * nSize );
for( int i = 0; i < nSize; i++ )
p[ i ] = 0;

PS:只懂C,不懂JAVA

int* a;

c中作用malloc函数 , Java中使用new