C语言指针4-内存的灵活操作

来源:互联网 发布:linux echo用法 编辑:程序博客网 时间:2024/05/01 10:31

使用指针操作内存是非常灵活的。

(1)我们定义的任何一个类型的任何一个变量,在程序运行时都占用一定的内存空间。

(2)指针的sizeof大小都是4字节(32位),可以指向任何内存空间,可以做任何类型的强制转换。

(3)当我们定义的指针不知是何类型时,可以使用void *(其实任何类型都可以),如malloc的返回值(void *)。

(4)内存操作一般使用memcpy函数。与strcpy不同在于:memcpy不会遇到0结束,一定会拷贝n个字节的数据。0即'/0'

(5)内存初始化一般使用memset(ptr, 0, sizeof(struct x));

 

假如我们有变量char str[128]和struct point{double x,y,z;} p;

将p的数据写入str内存中,我们可以:memcpy(str, &p, sizeof(struct point));

如果str中存储的是struct point结构数据,取用str中的数据,我们可以:memcpy(&p2, str, sizeof(struct point));

也可以:p2=(struct point *)str;

基本类型的变量同样可以,例如int x=234;

我们可以将x存储到str中:memcpy(str, &x, sizeof(int));

将x存储到p中:memcpy(&p, &x, sizeof(int));

如果写到str的第5个字节开始处,我们可以:memcpy(str+4, &x, sizeof(int));因为str为char类型,+4相当于移动4*sizeof(char)个字节。

取用这个int值,我们可以:int *y=(int *)&p;当然也可以memcpy(&y, &p, sizeof(int)),但是int y=(int)p是不行的。

 

注意:memcpy中目标内存要足够大,以便存储要复制的数据,否则内存错误。