c语言内存存储位置,C语言基础 内存区分与存储

内存分区

分配:从高地址到低地址

栈 : 局部变量 , 内存是由系统管理

堆 : 存放对象 , 它由程序员自己申请释放, 它的内存需要程序员自己管理

全局区 : 存放全局变量与静态变量, 它由系统管理

常量区 : 用来存放常量, 内存它由系统管理 , 它是只读区

代码区 : 用来存放代码, 内存它由系统管理 , 它是只读区

动态存储区

堆 : 动态存储区

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.里面内容不可以修改 ,可以保证程序安全性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值