做笔试题的时候老有些小错误,来总结一下。
例如:
int nums[3] = {
0};
int main(){
int numsSize=0;
scanf("%d",&numsSize);
int nums[numsSize]={
0};
}
int nums[3];
for (int i = 0; i < 3; i++) {
nums[i] = i;
}
int main(){
int numsSize=0;
scanf("%d",&numsSize);
int nums[numsSize];
memset(nums,0,sizeof(int)*numsSize);
}
注:需要注意的是:memset函数按字节对内存块进行初始化,所以不能用它将 int 数组初始化为 0 和 -1 之外的其他值。
scanf("%d",&numsSize);
int *temp = (int *)malloc(sizeof(int) * numsSize);
//获取行列数
scanf("%d %d", &n, &m );
//动态分配存储数组的大小
pArray = (int **)malloc( n * sizeof(int*) );
//使用双层循环将数据读入数组中
for( i=0; i<n; i++)
{
pArray[i] = (int*)malloc( m * sizeof(int) );
for( j=0; j<m; j++)
{
scanf("%d", pArray[i] + j );
}
}
希望在分配内存的同时进行初始化,请使用 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<numsSize;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语言)
上一篇
下一篇