C语言基础 内存区分与存储
来源:互联网 发布:51单片机和arm单片机 编辑:程序博客网 时间:2024/06/03 23:00
内存分区
分配:从高地址到低地址
栈 : 局部变量 , 内存是由系统管理
堆 : 存放对象 , 它由程序员自己申请释放, 它的内存需要程序员自己管理
全局区 : 存放全局变量与静态变量, 它由系统管理
常量区 : 用来存放常量, 内存它由系统管理 , 它是只读区
代码区 : 用来存放代码, 内存它由系统管理 , 它是只读区
动态存储区
堆 : 动态存储区
1.它的内存由程序员管理
使用动态存储区
1.导入 stdlib.h
malloc(size_t size)
向操作系统申请堆中一块存储空间 , 如果操作分配成功, 就会返回这个存储空间的地址 , 否则返回NULL
2.free(void *);告诉操作系统这块存储空间不再使用了 ,
有一个malloc 就必须有一个free与之对应 , 否则造成内存泄露
释放过的指针就不可以再次释放 , 否则程序崩溃
int main()
{
//向操作系统申请内存
int *pi = malloc(sizeof(int)) // 申请内存空间
if(*pi != NULL)
*pi = 20;
printf(“%d\n”,*pi);
free(pi); //释放存储空间
printf(“%d\n”,*pi);
free(pi);
//清空后指针使用free不会有任何效果 ,
printf(“%d\n”,*pi);
return 0;
}
字符串存储
char *name[] = “nc”;
*name = ‘c’;
// 因为这个指针指向的时常量区字符串 , 所以它不能修改其所指向内容,它没有权限, 程序会在此处崩溃
charname[] = “xhh”;
//charname[] = {‘x’;’h’;’h’;’\0'};
char*words = “today”;
char*sb = “today”;
char*xx = “today”;
printf(“%p\n”,words);
printf(“%p\n”,sb);
printf(“%p\n”,xx);
//输出地址都一样
总结 :
字符数组存储的字符是在栈 , 栈是可读可写, 所以字符的呢荣可以任意的修改
使用char类型的指针定义字符串, 它是在常量区, 常量区是一个只读区 , 它所指向的内容是不可以修改的
使用场景:
当你定义的字符串中的内容在后面需要修改的时候就使用字符数组.
当定义的字符串不需要修改的时候就使用字符指针来定义字符串
1.常量区的东西无论使用多少次 , 在内存只有一份
2.效率高 , 省内存
3.里面内容不可以修改 ,可以保证程序安全性
- C语言基础 内存区分与存储
- C语言基础-- 内存存储
- 黑马程序员_iOS开发C语言基础之二进制内存存储解析与字符操作
- C语言中内存区分配
- C语言基础:内存
- C语言: 如何区分 声明与定义
- C/C++程序内存中数据存储区分类
- C/C++程序内存中数据存储区分类
- C/C++程序内存中数据存储区分类
- C语言基础——变量与内存
- 程序设计基石与实践之C语言内存地址基础
- C语言入门基础篇,内存与变量关系
- C语言程序编译后的存储区域区分
- C语言内存地址基础
- C语言内存地址基础
- C语言内存地址基础
- C语言内存地址基础
- C语言内存地址基础
- 算法----插入排序(insert sort)
- 解惑rJava R与Java的高速通道
- 面试总结---TCP实现的chat_room程序
- Linux常用命令(五) - rm
- 第十二周项目4-银行系统(一)
- C语言基础 内存区分与存储
- PHP实现的快速排序算法
- 二叉树的建立及递归遍历
- Android中编辑其他应用的SharedPreferences(二)
- linux 关于线程不安全函数localtime小记
- .hdu4288 Coder & CF85-DSum of Medians
- IOS HTTP下载一个图片
- 杂七杂八 - 计算机二级题目
- 161、腾讯现场招聘问题 通配符匹配