IOS--C 语言 Lesson Three 内存

一 内存划分(按高到低);
1.栈区
1⃣定义:以栈的形式存在,类似羽毛球.先进后出
2⃣局部变量存放在栈区 由系统进行分配空间和系统释放,开发人员不需要关心如何为局部变量分配空间
3⃣在函数里定义的都是局部变量
2.静态区(全局区);
1⃣定义: 定义在函数的外面 不安全 谁都可以访问 不在 important 的自定义函数中 也不在 main 里
2⃣由 static 修饰的变量和全局变量都是存放在静态区
3⃣静态全局区里的数据也是由系统进行分配 和释放
4⃣ static 修饰的变量特定:
1. 存放在静态区 由 static 修饰的变量只会初始化一次

 for (int  i =0; i < 40; i++) {
 (int n =0 ;每次出来都是被初始化)
 static n =0;
 printf("%d\n",n);
 n++;
}
  1. 由 static 修饰变量 没有初始化 系统默认为0;
 static  int n ;
 printf("%d\n",n);

4.常量区;
常量:等号右边的 一般都是常量
1⃣(10,2.3,’c’,”loveling”)都存放在常量区 由系统进行分配和释放空间
2⃣p 在栈区 局部变量
char *p= “ios”;
printf(“常量区:%p\n”,&p);
3⃣*p = ‘I’; ERROR 存放在常量的不能修改 只能读取
5.代码区;
1⃣程序中运行的函数和语句都会编译成 CPU 指令都存放在代码区
2⃣函数名存放就是函数在代码区的首地址
3⃣代码区的数据也是由系统分配空间和释放空间

——————-Nyx————————

二 申请内存
所有的申请内存 最后都要记得释放
free(p1);
p1=NULL;

1.malloc 申请内存
数据类型 要一致.
char *p1 = malloc(conut +1);
free(p1);
p1=NULL;
2. void calloc(count,size);最特殊的一个
1⃣定义:和 malloc 一样 申请空间 但是 calloc 会先清空 申请的内存空间 所以效率没有 malloc 高
2⃣count 个数
size 大小(字节个数,申请几个字节的内存)
calloc 申请的字节数等于 count*size;
3. void realloc (*p,size);
1⃣从指针 p的位置喀什 重新申请(size)多少字节
从 P 的位置开始申请,如果后面有 size个连续字节的话,就直接申请 ,如果没有连续的size 就从新寻找 连续的字节空间 ,并且把之前申请的字节进行释放,指针会重指向.

    int *p3 =malloc(2);
    printf("%p\n",p3);
    p3 = realloc(p3, 40000);
    printf("%p\n",p3);

4.void memset (p,c,n);
1⃣从指针 P 开始初始化 n个自己的内存,并把 内容改为 c
2⃣

ps:1. int *p4 = malloc(4);
    memset(p4, 8,3);
    printf("%d\n",*p4);
    2.char *p5 = malloc(4);
    memset(p5, 66, 2);
    printf("%s\n",p5);

5.void * memcpy (dest,source,n);
1⃣从指针 source 的位置开始,向 dest 的位置,拷贝 N 个字节

   char str[]="ABC";
    char str2[]="123";
    memcpy(str, str2,1);
    printf("%s\n",str);
  1. int memcmp(p1,p2,n);
    1⃣比较p1 和p2 指向内存里的内容是否相同,比较 N 个字节 返回值为0,相同;不同时返回差值;
    逐个字节比较,返回第一对结果不为0 的同位置差值;
    /*
 int *p = malloc(4);
    *p = 259;
    int *p2 = malloc(4);
    *p2 = 3;
   int result = memcmp(p, p2, 2);
  printf("%d\n",result);

memcmp 不同之处就是他需要返回值 所以要记得有东西来接收它 result.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值