c/c++内存操作

c++:

new:

  int*ip;

    ip = new int;

    *ip =5;

    printf("%i",*ip);

delete:

  delete ip;

    ip=NULL; //避免造成野指针

c:

sizeof():表示一个变量的空间占几个字节;

  int *p = &a;

 // printf("%lu",sizeof(p)); 输出为8,即指针占8个字节;指针不同于一般变量,存的是变量的地址,在同一架构下地址长度都是相同的(cpu的最大寻址内存空间)

void* malloc(unsigned size); size表示字节大小

 void* realloc(void* ptr, unsigned newsize);  重新分配内存

void* calloc(size_t numElements, size_t sizeOfElement); calloc跟malloc差不多,但calloc比malloc多做了一步操作,就是将申请到的内存块全部初始化为0。参数numElements表示元素个数,sizeOfElement表示每个元素的大小

以上函数都是从堆上申请内存,所以需要程序猿自己释放内存,释放内存:free(void*ptr);

char *p = (char *)malloc(10*sizeof(char)); //前面的 (int *)是强制转换,后面的malloc(sizeof(int)); 是在内存中创建一个连续长度为sizeof(int)的区间之后再返回该区间的首地址给int * p

p = realloc(p, 20); //追加分配内存

sizeof: 计算字节大小 如:sizeof(int) //4;sizeof(char)//1;sizeof(int [100]) //400

memset : void *memset(void *s, int ch, size_t n);

将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向s的指针。

一维数组如何增加长度:

一、静态一维数组,在定义的时候就已经确定其长度

如:int a[10]; 静态数组不支持长度的增加。如果要增加长度,只能新定义一个更长的数组,并把原始数组的数据复制到新数组中。

二、动态一维数组,本质上是一个一维指针,并在其上分配一段内存,在这段内存上,可以当做数组来使用。

int*p; //定义指针

p = malloc(10*sizeof(int));//分配10个元素。

p = realloc(p,20*sizeof(int));//重新分配,长度增加到20. 使用该函数,可以保持原本空间内的数据不变,只是可用空间增加。

memcpy:

extern void *memcpy(void *dest, void *src, unsigned int count);

功能:由src所指内存区域复制count个字节到dest所指内存区域。

 int des[10];

 int src[5] = {2,4,7,4,4*5};

memcpy(des, src,4); ///拷贝src的5个数据到des

再拼接5个:

memcpy(des+5, src,4*5); ///再拷贝src的5个数据到des

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容