C语言怎么自定义数组长度。

Python014

C语言怎么自定义数组长度。,第1张

动态分配的数组可以自定义数组的长度,示例如下:

#include

<stdio.h>

#include

<string.h>

#include

<stdlib.h>

int

main()

{

printf("输入要分配的内存大小:")

int

size

scanf("%d",

&size)

//输入自定义的数组长度

int

*pstart

=

(int

*)malloc(sizeof(int)

*size)

if

(pstart==0)

{

printf("不能分配内存\n")

return

0

}

memset(pstart,

0x00,

sizeof(int)

*

size)

int

inx

for

(inx=0

inx!=size

++inx)

pstart[inx]

=

inx

for

(inx=0

inx!=size

++inx)

printf("%d\t",

pstart[inx])

printf("\n")

return

0

}

用 sizeof 可以获得数据类型或变量在内存中所占的字节数。同样,用 sizeof 也可以获得整个数组在内存中所占的字节数。因为数组中每个元素的类型都是一样的,在内存中所占的字节数都是相同的,所以总的字节数除以一个元素所占的字节数就是数组的长度。

比较特别的是,比特右移(>>)运算符可以是算术(左端补最高有效位)或是逻辑(左端补0)位移。例如,将11100011右移3比特,算术右移后成为11111100,逻辑右移则为00011100。

运算符的优先级从高到低大致是:单目运算符、算术运算符、关系运算符、逻辑运算符、条件运算符、赋值运算符(=)和逗号运算符。

C语言特点:

其一,广泛性。C语言的运算范围的大小直接决定了其优劣性。C语言中包含了34种运算符,因此运算范围要超出许多其它语言,此外其运算结果的表达形式也十分丰富。

其二,简洁性。9类控制语句和32个关键字是C语言所具有的基础特性,使得其在计算机应用程序编写中具有广泛的适用性,不仅可以适用广大编程人员的操作,提高其工作效率,同时还能够支持高级编程,避免了语言切换的繁琐。

C语言支持定义一个不显式定义长度的数组,即通过初始化数据来分配数组长度。

比如int a[] = {1,2,3,4,5}数组a的长度没有显式给出,由于有5个初始化数据,所以分配空间长度为5个int型。

但是无论如何定义,数组的长度都是固定的,在定义的时候就已经分配好空间,从这个角度上C语言无法定义无限长的数组。但很多实际应用中又事先无法确定数组的长度,对于这类情况,一般有两种方法可以使用。

1 由malloc和realloc两个函数,分配动态空间,随时按需改变数组的最大长度。

通过下面例子来理解该方法:

#include <stdio.h>

#include <stdlib.h>

int main()

{

   int size=100//最初为100个元素空间。

   int *a = NULL

   int i = 0

   

   a = malloc(sizeof(int) * size)

   if(a == NULL) return -1

   while(scanf("%d", a+i) == 1)//循环向a中输入数据,直到输入非数值字符为止

   {

       i++

       if(i == size)//数组空间不足

       {

           size *=2 //将数组空间扩大二倍, 也可以改用size+=100之类的操作,使size每次增加固定值。

           a=realloc(a,size)//分配新的空间

           if(a==NULL)

           {

               return -1//这种情况下运行载体(如PC)内存不足以提供,中断程序。

           }

       }

   }

   

   if(a) free(a)//对申请的内存进行释放。

   return 0

}

从以上程序可以看到,这种方式的原理就是每当数组空间不足时,利用函数realloc分配一段新的内存空间以增大数组长度。 直到占满所有剩余空间。

如果到占满所有空间还是无法存下数据,那么是硬件无法支持了。

所以这种方法可以做到软件意义上的无限大数组空间。

但是这种方法代码量比较大,而且需要频繁的进行内存的分配,如果实现知道数据的最大可能规模,那么可以用另一个方法。

2 事先知道数据的最大规模,比如统计一个班的分数时,一个班最多不超过百人,那么可以直接定义一个长度为100的数组,或者保险起见,定义一个长度为1000的数组,并对其操作。这样在操作范围内,这个就是一个“无限长”的数组了。