美文网首页
C语言内存及堆栈操作

C语言内存及堆栈操作

作者: 玉宾 | 来源:发表于2020-08-11 20:37 被阅读0次

    毕业了,想留的人没能留住,想要的生活也没有如约而至,也就这样了。。。

    ----  网易云热评

    在程序没有执行前,有几个内存分区已经确定,虽然分区确定,但是没有加载内存,程序只有运行时才加载内存:

    text(代码区):只读,例如函数

    data:初始化的数据,全局变量,static变量,文字常量区

    bss:没有初始化的数据,全局变量,static变量

    stack:栈区,返回值,普通局部变量,自动管理内存,先进后出的特点 

    heap:堆区,手动申请空间malloc(),手动释放free(),程序结束自动回收

    一、内存操作

    1、memset,将一个数组的内存区域前n个成员用字符填充,主要用来重新初始化数据

    #include <stdio.h>

    #include <string.h>

    int main() {

           int a[100];

           for (int i=0;i<10;i++)

           {

                  a[i] = i + 1;

           }

           printf("%d\n",a[1]);

            //将a的前sizeof(a)个元素,用0填充

           memset(a, 0, sizeof(a));

           printf("%d\n", a[1]);

           system("pause");

           return 0;

    }

    2、memcpy,全拷贝,不管中间是否有结束符,memmove,如果内存重叠,用这个拷贝

    #include <stdio.h>

    #include <string.h>

    int main() {

           char p[]="aiyou\0bucuo";

           char buf[100];

           int a = sizeof(p);

           printf("字符串长度:%d\n", a);

           strncpy_s(buf, 100, p,a);

           printf("buf1=%s\n", buf);

           printf("buf2=%s\n", buf + strlen("aiyou") + 1);

            //将buf初始化,用0填充

           memset(buf, 0, sizeof(buf));

            //拷贝,将p的内容拷贝到buf中,大小为a

           memcpy(buf,p,a);

           printf("buf3=%s\n", buf);

           printf("buf4=%s\n", buf + strlen("aiyou") + 1);

           system("pause");

           return 0;

    }

    运行结果:

    3、memcmp,比较数据是否相等

    #include <stdio.h>

    #include <string.h>

    int main() {

           char a[] = "abc";

           char b[] = "abd";

           char c[] = "abc";

           printf("对比结果为:%d\r\n", memcmp(a,b ,sizeof(a)));

           printf("对比结果为:%d\r\n", memcmp(b, a, sizeof(a)));

           printf("对比结果为:%d\r\n", memcmp(a, c,sizeof(a)));

           system("pause");

           return 0;

           system("pause");

           return 0;

    }

    运行结果:

    二、堆栈操作

    1、指向栈的指针

    int *p;

    int a=0;

    p=&a;

    *p=111;

    2、指向堆指针,参数指定堆区分配多大空间

    int *p

    //手动申请堆空间

    p=(int *)malloc(sizeof(int));

    *p=111;

    .....

    //手动释放堆空间

    free(p);

    欢迎关注公众号:顺便编点程

    相关文章

      网友评论

          本文标题:C语言内存及堆栈操作

          本文链接:https://www.haomeiwen.com/subject/ghtudktx.html