使用指针操作内存是非常灵活的。
(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中目标内存要足够大,以便存储要复制的数据,否则内存错误。