c语言数组不定义长度 如何在数组定义时,数组的长度用一个变量?
如何在数组定义时,数组的长度用一个变量?
在我所有已知的语言中,静态数组的长度都不可以是变量,这个可以参考语法:chararr[10] 但是,如果是动态数组,则长度可以是变量,比如char*p=newchar[length] 另一种可能的情况是数组封装类,这个不同语言有不同实现,比如java中的Array,比如STL中的向量类等等。
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的指向
单片机C语言中不同数组能用同一个变量来代表其中的数组大小吗?
原则上,C语言中数组所包含的元素个数理论上多少都行,如果要开一个很大的数组,比如int arrayint[10000][10000];在main()中声明该数组就会使应用程序退出,但是如果你把该数组的声明放在所有函数体之外,让它变成一个全局变量,就没有任何限制了,你想开多大的数组都可以。
但在单片机c语言程序中,实际上还是有限制的,原因在于单片机的存储空间是有限的,数组最多能有几个元素取决于单片机型号。
你定义了一个全局的数组,unsigned char型的数组,最多只能有93个元素,说明你还有其他变量占用存储空间。如果需要一个512个元素的数组,用的单片机是stc15f2k60s2,可在定义数组时进行XDATA声明,将数组存储于外部RAM当中。
如何把C语言中数组的单个元素用变量赋值?
C语言中,定义数组后,对数组某个元素进行赋值的一般方法为:数组名[下标]=x其中:x为相对应的变量或常量值。下标可以是整型常量、变量或表达式,下标的有效取值范围为0-n(n为数组大小)如:inta[10]//定义一个有10个元素的整形数组a[0]=5//下标为常量a[1]=8a[2]=a[0]intb=3a[b]=10//下标为变量intifor(i=0i<100i )a[i] =i//下标为表达式
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。