动态内存分配

在学习数组的过程中,在输入数组时,原本想过scanf定义数组的大小再输入数组的各值,却报错。

发现原因:
1.定义数组的时必须指定数组长度
2.数组长度是在编译期就必须决定的

所以此时需要用到C语言中的动态内存分配
通过动态内存分配,则代码可以如此来实现。

#include<stdio.h>
#include<stdlib.h>
int main()
{int *a;int i,m,n;scanf("%d",&n);a = (int*)malloc(sizeof(int)*n);for (i =0;i<n;i++)scanf("%d",(a+i));for (i = 0;i<n;i++)printf("%d\n",*(a+i));
}

那么
int a = (int)malloc(n*sizeof(int));
代表什么意思呢?

int *a=(int )malloc(nsizeof(int));

表示定义一个int类型的指针变量a,并申请nsizeof(int)个字节(即4n个字节)的存储空间。
malloc是在C语言中是一个申请内存单元的函数。
函数原型:void *malloc(unsigned size);
功 能:分配size个字节的内存空间
返 回 值:成功,返回分配的内存单元的起始地址;否则返回0

malloc函数介绍

在C语言中,使用malloc函数来申请内存。函数原型如下:

#include<stdlib.h>

void *malloc(size_t size);

参数size代表需要动态申请的内存的字节数,若内存申请成功,函数返回申请到的内存的起始地址,若申请失败,返回NULL, 在使用该函数时应注意以下几点

1.只关心申请内存的大小,该函数的参数很简单,只有申请内存的大小,单位是字节

2.申请的是一块连续的内存,该函数一定是申请一块连续的区间,可能申请到内存比实际申请的大,但也有可能申请不到,若申请失败,则返回NULL

3.返回值类型是void*,函数的返回值是void*,不是某种具体类型的指针,可以理解成该函数只是申请内存,对在内存中存储什么类型的数据,没有要求,因此,返回值是void*,实际编程中,根据实际情况将void*转换成需要的指针类型

4.显示初始化,注意:堆区是不会自动在分配时做初始化的(包括清零),所以程序中需要显示的初始化

C语言数组用到的动态内存分配相关推荐

  1. c语言动态内存分配数组,【C】动态内存分配

    ## 动态内存分配的意义 C语言中的一切操作都是基于内存的 变量和数组都是内存的别名 内存分配由编译器在编译期间决定 定义数组的时候必须指定数组长度 数组长度是在编译期就必须确定的需求: 程序在运行过 ...

  2. C语言第十三课,动态内存分配

    动态内存分配的空间放在堆区.动态内存函数主要有:malloc,calloc,realloc 动态内存函数的介绍 malloc 申请一个空间,大小是size的大小,指向的一个类型不明,因为在设计的时候, ...

  3. c语言遍历文件内容_C语言学习第28篇---动态内存分配剖析

    为什么C语言要动态分配内存的意义? 1.C语言中的一切操作都是基于内存的 2.变量和数组都是内存的别名 ---内存分配由编译器在编译期间决定的 ---定义数组的时候必须指定数组长度 ---数组长度是在 ...

  4. 在c语言中,可以使用动态内存分配技术定义元素个数可变的数组,C语言复制在线考题1精选.doc...

    C语言复制在线考题1精选 窗体顶端 <C语言程序设计208304>综合测试 返回测验列表 大项 1 / 2 - 单项选择题 60.0/ 70.0 分 本大题共35道,每题2分,共计70分, ...

  5. C语言学习笔记10-指针(动态内存分配malloc/calloc、realloc、释放free,可变数组实现;Tips:返回指针的函数使用本地变量有风险!;最后:函数指针)

    C语言:指针 1. 指针:保存地址的变量 *p (pointer) ,这种变量的值是内存的地址.   取地址符& 只用于获取变量(有地址的东西)的地址:scanf函数-取地址符   地址的大小 ...

  6. 浅谈C语言动态内存分配及柔性数组

    文章目录 前言 1.动态内存的简单介绍 1.动态内存分配是什么? 2.为什么存在动态内存分配? 3.动态内存分配具体方法 1.动态内存函数 2.动态内存注意事项 2.经典面试题分析 3.C/C++程序 ...

  7. Android JNI编程(五)——C语言的静态内存分配、动态内存分配、动态创建数组...

    版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一:什么是静态内存什么又是动态内存呢? 静态内存:是指在程序开始运行时由编译 ...

  8. 【C 语言】内存管理 ( 动态内存分配 | 栈 | 堆 | 静态存储区 | 内存布局 | 野指针 )

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  9. 【C语言进阶深度学习记录】三十三 C语言中动态内存分配

    如何在程序运行的时候动态给程序分配内存? 文章目录 1 动态内存分配的意义 1.1 C语言中如何动态申请内存空间 1.2 malloc和free的用法 1.3 calloc与realloc 1.31 ...

最新文章

  1. 有关中断唤醒源的思考
  2. 一步一步学Silverlight 2系列(20):如何在Silverlight中与HTML DOM交互(下)
  3. 学完这篇依赖注入,与面试官扯皮就没有问题了。
  4. (03)FPGA与CPLD区别
  5. ddd架构 无法重构_DDD有什么用?
  6. Python 爬虫实战2 百度贴吧帖子
  7. HttpWebRequest中GetResponse或者说GetRequestStream偶尔超时,或者是各种操作超时造成的假死的一些解决方案...
  8. URL$HTTP协议
  9. 有哪些免费软件下载网站,安全靠谱的软件分享网站
  10. 线性分式变换(linear fractional transformation)
  11. 未来计算机专业会怎么样
  12. Windows server 2016成为域控制器,将客户机加入域
  13. Ubuntu20.04LTS环境下载STM32程序
  14. matlab左侧栏没了,AI软件左侧的工具栏不见了没有了怎么显示出来
  15. 漫画:什么是服务熔断
  16. 仿腾讯QQ竖直滑动导航菜单
  17. 史上最牛实习生爆料:我在赶集网的两个月
  18. 投弃式海洋仪器设备(XBT/XCTD)
  19. 怎样进计算机安全模式,如何进入电脑安全模式
  20. Win系统 - 关闭 Windows 应用商店自动更新

热门文章

  1. 《Who moved my cheese?》笔记
  2. php搭建markdown云笔记_使用 Leanote 搭建自己专属的云笔记
  3. java截取字符串中的一部分字符,我先收藏为敬
  4. 10G Ethernet Mac IP核
  5. Marketing and Monetizing on YouTube YouTube上的营销和货币化 Lynda课程中文字幕
  6. 车牌识别软件简析及国内各厂家对比数据
  7. 5.1/2每日一题——胖胖的牛牛
  8. 小米平板2刷哪个系统更流畅_终于给小米平板1刷上第三方安卓7.1系统了。一个字很流畅,性能几乎比安卓4.4.4底包的miui9多一万多分。 小米平板2安卓效率...
  9. 愿你历经千帆,归来仍是少年
  10. 【笔记】期权v1.0(python版)