C语言数组用到的动态内存分配
动态内存分配
在学习数组的过程中,在输入数组时,原本想过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语言数组用到的动态内存分配相关推荐
- c语言动态内存分配数组,【C】动态内存分配
## 动态内存分配的意义 C语言中的一切操作都是基于内存的 变量和数组都是内存的别名 内存分配由编译器在编译期间决定 定义数组的时候必须指定数组长度 数组长度是在编译期就必须确定的需求: 程序在运行过 ...
- C语言第十三课,动态内存分配
动态内存分配的空间放在堆区.动态内存函数主要有:malloc,calloc,realloc 动态内存函数的介绍 malloc 申请一个空间,大小是size的大小,指向的一个类型不明,因为在设计的时候, ...
- c语言遍历文件内容_C语言学习第28篇---动态内存分配剖析
为什么C语言要动态分配内存的意义? 1.C语言中的一切操作都是基于内存的 2.变量和数组都是内存的别名 ---内存分配由编译器在编译期间决定的 ---定义数组的时候必须指定数组长度 ---数组长度是在 ...
- 在c语言中,可以使用动态内存分配技术定义元素个数可变的数组,C语言复制在线考题1精选.doc...
C语言复制在线考题1精选 窗体顶端 <C语言程序设计208304>综合测试 返回测验列表 大项 1 / 2 - 单项选择题 60.0/ 70.0 分 本大题共35道,每题2分,共计70分, ...
- C语言学习笔记10-指针(动态内存分配malloc/calloc、realloc、释放free,可变数组实现;Tips:返回指针的函数使用本地变量有风险!;最后:函数指针)
C语言:指针 1. 指针:保存地址的变量 *p (pointer) ,这种变量的值是内存的地址. 取地址符& 只用于获取变量(有地址的东西)的地址:scanf函数-取地址符 地址的大小 ...
- 浅谈C语言动态内存分配及柔性数组
文章目录 前言 1.动态内存的简单介绍 1.动态内存分配是什么? 2.为什么存在动态内存分配? 3.动态内存分配具体方法 1.动态内存函数 2.动态内存注意事项 2.经典面试题分析 3.C/C++程序 ...
- Android JNI编程(五)——C语言的静态内存分配、动态内存分配、动态创建数组...
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一:什么是静态内存什么又是动态内存呢? 静态内存:是指在程序开始运行时由编译 ...
- 【C 语言】内存管理 ( 动态内存分配 | 栈 | 堆 | 静态存储区 | 内存布局 | 野指针 )
相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...
- 【C语言进阶深度学习记录】三十三 C语言中动态内存分配
如何在程序运行的时候动态给程序分配内存? 文章目录 1 动态内存分配的意义 1.1 C语言中如何动态申请内存空间 1.2 malloc和free的用法 1.3 calloc与realloc 1.31 ...
最新文章
- 有关中断唤醒源的思考
- 一步一步学Silverlight 2系列(20):如何在Silverlight中与HTML DOM交互(下)
- 学完这篇依赖注入,与面试官扯皮就没有问题了。
- (03)FPGA与CPLD区别
- ddd架构 无法重构_DDD有什么用?
- Python 爬虫实战2 百度贴吧帖子
- HttpWebRequest中GetResponse或者说GetRequestStream偶尔超时,或者是各种操作超时造成的假死的一些解决方案...
- URL$HTTP协议
- 有哪些免费软件下载网站,安全靠谱的软件分享网站
- 线性分式变换(linear fractional transformation)
- 未来计算机专业会怎么样
- Windows server 2016成为域控制器,将客户机加入域
- Ubuntu20.04LTS环境下载STM32程序
- matlab左侧栏没了,AI软件左侧的工具栏不见了没有了怎么显示出来
- 漫画:什么是服务熔断
- 仿腾讯QQ竖直滑动导航菜单
- 史上最牛实习生爆料:我在赶集网的两个月
- 投弃式海洋仪器设备(XBT/XCTD)
- 怎样进计算机安全模式,如何进入电脑安全模式
- Win系统 - 关闭 Windows 应用商店自动更新
热门文章
- 《Who moved my cheese?》笔记
- php搭建markdown云笔记_使用 Leanote 搭建自己专属的云笔记
- java截取字符串中的一部分字符,我先收藏为敬
- 10G Ethernet Mac IP核
- Marketing and Monetizing on YouTube YouTube上的营销和货币化 Lynda课程中文字幕
- 车牌识别软件简析及国内各厂家对比数据
- 5.1/2每日一题——胖胖的牛牛
- 小米平板2刷哪个系统更流畅_终于给小米平板1刷上第三方安卓7.1系统了。一个字很流畅,性能几乎比安卓4.4.4底包的miui9多一万多分。 小米平板2安卓效率...
- 愿你历经千帆,归来仍是少年
- 【笔记】期权v1.0(python版)