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

C语言数组初始化及malloc初始化前言做笔试题的时候老有些小错误 来总结一下 数组赋值初始化的三个方式 1 0 初始化例如 intnums 3 0 但是经常出现的是给定长度 变量 然后需要进行初始化 如果写成下式 intmain intnumsSize 0 scanf d amp numsSize intnums numsSize 0 则会出现以下报错信息 error variable sizedobjectm

前言

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

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

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 <string.h>
int main(){ 
    int numsSize=0; scanf("%d",&numsSize); int nums[numsSize]; memset(nums,0,sizeof(int)*numsSize); } 

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

使用malloc动态分配大小

  • 使用时需包含头文件:#include <stdlib.h>
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<n; i++) { 
    pArray[i] = (int*)malloc( m * sizeof(int) ); for( j=0; j<m; 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<numsSize;i++){ 
    printf("%d\n",res[i]); } 

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

参考文献

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233463.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2021编程语言排行榜出炉

    2021编程语言排行榜出炉今日,IEEESpectrum发布了2021年度编程语言排行榜,其中Python在总榜单以及其他几个分榜单中依然牢牢占据第一名的位置。另外值得关注的是微软C#语言,它的排行从2020年的第23名跃升至了今年的第6名,称得上是今年的大势语言。2021年度编程语言排行榜依然从8个信息源按照11种指标收集数据,最终得到了数十种编程语言流行度的整体排名。这8个信息源分别为CareerBuilder、GitHub、Google、HackerNews、IEEE、Reddi

    2022年7月15日
    16
  • mongoVue激活成功教程版「建议收藏」

    mongoVue激活成功教程版「建议收藏」下载地址:https://pan.baidu.com/s/1mhPejwO#list/path=%2Fwindows%20soft

    2022年8月21日
    7
  • ingress什么意思_k8s kong

    ingress什么意思_k8s kongk8sIngress介绍Http代理Https代理Ingress介绍我们已经知道,Service对集群之外暴露服务的主要方式有两种:NodePort和LoadBalancer,但是这两种方式,都有一定的缺点:NodePort方式的缺点是会占用很多集群机器的端口,那么当集群服务变多的时候,这个缺点就愈发明显。LoadBalancer的缺点是每个Service都需要一个LB,浪费,麻烦,并且需要kubernetes之外的设备的支持。基于这种现状,kubernetes提供了Ingress资源对象,I

    2022年8月9日
    3
  • NoSQL中的行存储与列存储

    NoSQL中的行存储与列存储在已知的几种大数据处理软件中,Hadoop的HBase采用列存储,MongoDB是文档型的行存储,Lexst是二进制型的行存储。在这里,我不讨论这些软件的技术和优缺点,只围绕机械磁盘的物理特质,分析行存储和列存储的存储特点,以及由此产生的一些问题和解决办法。  一.结构布局  行存储数据排列  列存储数据排列  表格的灰色背景部分表示行列结构,白色背景部分表示数据的

    2022年7月14日
    12
  • js判断字符串数组是否包含某个字符串_java数组排序函数

    js判断字符串数组是否包含某个字符串_java数组排序函数在C#语法中判断集合是否包含某个元素可以使用Contains方法,但是类似的问题在javascript中要怎么处理呢,js中没有Contains方法。我们可以利用js的原型扩展来封装一个我们自己的Contains方法。js代码:        $(function(){           Array.prototype.contains=functio

    2022年10月9日
    4
  • 什么是跨域?跨域解决方法

    什么是跨域?跨域解决方法一、为什么会出现跨域问题出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协…

    2022年4月28日
    54

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号