C语言数组初始化及malloc初始化

C语言数组初始化及malloc初始化

前言

做笔试题的时候老有些小错误,来总结一下。

数组赋值初始化的三个方式

1、{0} 初始化

例如:

int nums[3] = {0};

但是经常出现的是给定长度(变量)然后需要进行初始化,如果写成下式:

int main(){

int numsSize=0;

scanf("%d",&numsSize);

int nums[numsSize]={0};

}

则会出现以下报错信息:error: variable-sized object may not be initialized?这个提示是:变量大小的对象不能被初始化。显示如下错误信息的原因是可以用变量定义数组长度,但不可初始化。

2、for 循环初始化

该方式常用于获取输入时,将for循环中的内容改为**scanf("%d",&nums[i]);**即可实现。

int nums[3];

for (int i = 0; i < 3; i++) {

nums[i] = i;

}

3、memset 函数

memset 一般使用“0”初始化内存单元,通常是给数组或结构体进行初始化,或清空数组或结构体。因此可以用变量定义数组长度,再通过使用memset函数使整个数组置0实现初始化。使用时需要使用库,#include

int main(){

int numsSize=0;

scanf("%d",&numsSize);

int nums[numsSize];

memset(nums,0,sizeof(int)*numsSize);

}

注:需要注意的是:memset函数按字节对内存块进行初始化,所以不能用它将 int 数组初始化为 0 和 -1 之外的其他值。

使用malloc动态分配大小

使用时需包含头文件:#include

1、动态申请一维数组

scanf("%d",&numsSize);

int *temp = (int *)malloc(sizeof(int) * numsSize);

2、动态申请二维数组

首先通过:pArray = (int **)malloc( n * sizeof(int * ) )该语句来分配所有行的首地址 。接着pArray[i] = (int *)malloc( m * sizeof(int) );来分配每行的首地址。

//获取行列数

scanf("%d %d", &n, &m );

//动态分配存储数组的大小

pArray = (int **)malloc( n * sizeof(int*) );

//使用双层循环将数据读入数组中

for( i=0; i

{

pArray[i] = (int*)malloc( m * sizeof(int) );

for( j=0; j

{

scanf("%d", pArray[i] + j );

}

}

3、对动态数组进行初始化

希望在分配内存的同时进行初始化,请使用 calloc() 函数。

calloc() 函数是动态申请内存函数之一,相当于用malloc函数申请并且初始化一样,calloc函数会将申请的内存全部初始化为0。

calloc() 函数用来动态地分配内存空间并初始化为 0,其原型为: void * calloc (size_t num, size_t size); calloc()函数有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小。

calloc() 在内存中动态地分配 num 个长度为 size 的连续空间,并将每一个字节都初始化为 0。所以它的结果是分配了 num*size 个字节长度的内存空间,并且每个字节的值都是0。 如果 size 的值为 0,那么返回值会因标准库实现的不同而不同,可能是 NULL,也可能不是,但返回的指针不应该再次被引用。

- int *res = (int*)calloc(numsSize, sizeof(int));

- //方法二:

- int *res = (int*)malloc(numsSize * sizeof(int));

memset(res, 0, numsSize * sizeof(int));

//测试代码

for(int i=0;i

printf("%d\n",res[i]);

}

注:用memset给指针变量如p所指向的内存单元进行初始化时,n 千万别写成 sizeof( p ),因为 p 是指针变量,不管 p 指向什么类型的变量,sizeof( p ) 的值都是 4。

参考文献

C语言数组初始化的三种方式 数组的定义,初始化和使用,C语言数组详解 C语言-数组的初始化,数组和指针,函数与数组 C语言中的malloc使用详解 C语言malloc初始化问题 C语言中的malloc、new、memset函数解析 C语言 结构体使用malloc动态申请内存时,关于如何初始化结构体的解决方法 数组相关知识学习总结(及malloc与memset初始化问题)(C语言)

相关推荐

鱼宝宝们是怎样出生的?(自由放养型)
小米商城买的手机配货到出库要多久?
365bet备用在线

小米商城买的手机配货到出库要多久?

📅 09-06 👀 1144
申字加偏旁有哪些字?
365bet备用在线

申字加偏旁有哪些字?

📅 10-03 👀 425
倪海厦老师的老师周左宇先生《医道精要古典针灸》