数组的大小定义为变量(数组的大小是可变的)
C语言中数组大小如何用已经被赋值的变量来定义? 求详细的样本代码。
这个需要用指针来动态分配内存,比如
int size=8;
int *nums;
nums=(int *)malloc(sizeof(int)*size);
然后你就可以把nums当成长度为8的数组使用了,其操作方式和int nums[8];一模一样
C语言中数组长度不能用变量定义吗?
C语言里,所有变量空间都是在程序运行之初向系统申请的,包括指针,除了一些动态申请方式如malloc函数。没有申请的空间系统是不允许读写的。那么如果一个数组大小是变量定义,则在程序运行前不能确定数组大小,也就无法申请,故不允许。所以,解决的办法便是通过malloc函数,即
int a[n];
可改为
int* const a = (int*)malloc(sizeof(int)*n);
这样a变量就完全可以当作一个数组直接使用了,包括a[1]之类的。因为“[]”中括号运算符做的只是偏移其内的地址数并取值。如:
a[1]
等价于
*(a + 1)
而const修饰符在星号之后,则表示指针在被声明后不能改变,即只能指向这个获取的空间,完全符合数组的性质
综上所述,如果需要变量控制长度的一个数组,类似“int a[n];”的,可改成“int* const a = (int*)malloc(sizeof(int)*n);”并直接作为数组以[]方式使用。const可以去掉,但要保证使用时不改变a的指向
VC++(Visual C++)中可否用变量定义数组大小?如何设形如int a[]这样的呢?(如VB中的ReDim语句)
VC里不能像VB那样随意改变数组大小,必须在定义的时候就声明其大小如:
char str[100];
char str1[]="Holle World!";
如果要应用可变数组,VC有更加强大更加灵活的指针,其实现如下:
char *str;
int Length;
Length=500;
……
str=new char[Length];
……
delete str;
最后这个delete很申请不释放会导致内存泄露的。
如果你自己也不知道得用多少个单元,那就要考虑用链表之类的数据类型来解决了。相关内容有点多你上网找下吧网上很多。
定义数组时,数组的长度可以是变量???急求解!!谢谢
在我所有已知的语言中,静态数组的长度都不可以是变量,这个可以参考语法:char
arr[10];
但是,如果是动态数组,则长度可以是变量,比如char*
p
=
new
char[length];
另一种可能的情况是数组封装类,这个不同语言有不同实现,比如java中的Array,比如STL中的向量类等等。
在定义数组时,数组大小必须是常量,不能使变量或变量表达式?
对于传统的 C 数组(C90),必须用常量表达式指明数组的大小。
C99/C11新增了变长数组,可以用变量表示数组大小。
声明一个简单的一维数组形式如下:
type name [ size ];
这里,type是数组中每个元素的数据类型,name是数组名,size是数组元素的个数。
对于传统的C数组,要求size是整型常量表达式。
但是C99/C11允许使用整型非常量表达式,这种情况下的数组被称为变长数组。
数组长度为什么不能是变量
数组的大小不能用变量表示的,是因为在编译连接期间内存要按照你制定的长度给数组分配相应的内存空间,如果是变量的话就没有办法给它分配了,你可以用符号常量来解决,在开头用:
# define m 100
# define n 100 然后在程序中就可以定义u[m][n]二维数组了,当不一定非要是100,可以是任何一个正整数。
C语言里,所有变量空间都是在程序运行之初向系统申请的,包括和指针,它也需要空间,除了一些动态申请方式如malloc函数。没有申请的空间系统是不允许读写的。那么如果一个数组大小是变量定义,则在程序运行前不能确定数组大小,也就无法申请,故不允许。解决的办法如前面所说,如:
int a[n];
可改为
int* const a = (int*)malloc(sizeof(int)*n);
这样a变量就完全可以当作一个数组直接使用了,包括a[1]之类的。因为“[]”中括号运算符做的只是偏移其内的地址数并取值。如:
a[1]
等价于
*(a + 1)
而const修饰符在星号之后,则表示指针在被声明后不能改变,即只能指向这个获取的空间,完全符合数组的性质。