杂#
int (*p)[4]
是行指针变量,p[0]+1
指向的是p[1]
;int *p[4]
是指向4个元素的指针数组a[i]+j == &a[i][j]
a[i][j] == *(a[i]+j)
动态内存的申请与释放#
malloc()函数#
函数原型 void *malloc(bit_num)
从 内存堆 上申请指定字节数的内存块,并返回该内存块的首地址
调用格式 例
1 | char *p; |
一般需搭配 free()
在使用后倒序释放内存
注意: 若内存申请不成功 malloc()
将返回空指针( NULL )以作标识
calloc()函数#
函数原型 void *calloc(size_t n, size_t size);
在内存的动态存储区申请 n 块长度为size的连续空间
调用格式 例
指针名 = (数据类型 *)calloc(n, size);
realloc()函数#
函数原型
void *realloc(void *mem_address, size_t newsize);
在原已申请的内存块 mem_address
上再申请一块内存块
执行逻辑是,判断 mem_address
后是否有连续空间,若有则扩大并将 mem_address
返回,若无则新申请一块并将原有数据搬迁,并自动释放原地址,若申请不到则返回
NULL
调用格式 例
指针名 = (数据类型 *)realloc(指针名, 新内存长度);
free()函数#
void free(void *ptr)
释放顺序最好与申请顺序相反,以免产生内存碎块。