① c语言中数组的大小可以改变吗
数组大小一旦确定就不能改变。
数组长度必须在编译时确定,可以使用malloc函数在程序运行时动态分配所需“数组”长度。定义数组需要指定数组的长度,然后系统会根据这个长度分配固定的内存大小。
当出现intarray[10];这种情况的时候,是不可以变的,这时候变量的存储空间在栈区。当intn;cin>>n;intarray=newint[n];的时候,数组可以根据n输入的大小去分配内存,这时候数组存在堆区。
(1)c语言调用函数时数组长度为零扩展阅读
长度为0的数组在标准C和C++中是不允许的,如果使用长度为0的数组,编译时会产生错误,提示数组长度不能为0。但在GNUC中,这种用法却是合法的。
它的最典型的用法就是位于数组中的最后一项,这样做主要是为了方便内存缓冲区的管理。如果长度为0的数组换为指针,那么在分配内存时,需采用两步:
1、需为结构体分配一块内存空间;
2、再为结构体中的成员变量分配内存空间。这样两次分配的内存是不连续的,需要分别对其进行管理。当使用长度为0的数组时,则是采用一次分配的原则,一次性将所需的内存全部分配给它。相反,释放时也是一样的。
② c语言中怎么把一维数组初始化为全零啊,不用循环
下面3种方法:
1.int arr[10]={0};
如果只对数组的一部分进行初始化,则编译器将把其他元素设置为0。因此,当只将第一个元素初始化为0时,编译器会自动将其他元素设为0 (就像前一句说的那样)。
2.int arr[31]={};
3.用memset函数在程序开始时初始化数组。比如:
int arr[1024];
memset(arr, 0, 1024); //清零
(2)c语言调用函数时数组长度为零扩展阅读:
memset()函数原型是extern void *memset(void *buffer, int c, int count) buffer:为指针或是数组,c:是赋给buffer的值,count:是buffer的长度。
函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法 ,它通常为新申请的内存做初始化工作。
③ C语言如何定义0数组
是编译错误吧,你这里的n是个变量,到运行时才能确定,但数组在编译时就要确定长度,所以出错。建议这样#define N 100 再用N
④ C语言里有没有把数组元素全部赋值为0的函数
方法一、在定义时赋初值
1、静态数组
int[3][3]={0};
2、动态数组
int**a=newint*[n];
for(inti=0;i<n;i++)
a[i]=newint[m](0);
方法二、在定义完后赋值
for(inti=0;i<n;i++)
{
for(intj=0;j<m;j++)
a[i][j]=0;
}
方法三、用一个循环吧数组所有元素设置为0:
intarr[100];
inti=0;
for(i=0;i<100;i++)
arr[i]=0;//ThiswillmakeallZERO
方法四、
1、全局变量和静态变量初始化时会自动被设置为0。如果们声明全局变量,那么在运行前会变成全0。
intarr[1024];//Thisisglobal
intmain(void)
{
//statements
}
2、对于局部数组简写的初始化语法。如果一个数组被部分初始化,没有被初始化的元素会被自动设置为相应类型的0。这是编译器自动完成的。可以这样写:
intmain(void)
{
intarr[1024]={0};//ThiswillmakeallZERO
//statements
}
3、可以用memset函数在程序开始时初始化数组。这条命令这在已经修改了数组之后又想将它重置为全0特别有用。
intarr[1024];
arr[5]=67;
memset(ZEROARRAY,0,1024);//ThiswillreinitializealltoZERO
⑤ C语言中怎么把一维数组初始化都为0,
1、首先,需要定义数组,数组常用类型有int型,float浮点型,char字符型等,输入即可定义。