0
点赞
收藏
分享

微信扫一扫

C语言内存及堆栈操作


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

----  网易云热评

 

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

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;

}

运行结果:

C语言内存及堆栈操作_C语言

 

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;

}

运行结果:

C语言内存及堆栈操作_C语言_02

 

 

二、堆栈操作

1、指向栈的指针

int *p;

int a=0;

p=&a;

*p=111;

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

int *p

//手动申请堆空间

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

*p=111;

.....

//手动释放堆空间

free(p);

 

 

C语言内存及堆栈操作_堆栈操作_03

 

举报

相关推荐

0 条评论