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