2 指针
杂
int (*p)[4]
是行指针变量,p[0]+1
指向的是同一行的下一个元素,p+1
或p[1]
指向下一行;int *p[4]
是指向 4 个元素的指针数组a[i]+j == &a[i][j]
a[i][j] == *(a[i]+j)
动态内存的申请与释放
malloc () 函数
函数原型 void *malloc(bit_num)
从 内存堆 上申请指定字节数的内存块,并返回该内存块的首地址
调用格式 例
C
char *p;
double **q;
int (*a)[4];
p = (char *)malloc(sizeof(char) * 20);
p = (double **)malloc(sizeof(double) * 10);
p = (int (*)[4])malloc(sizeof(int) * 4 * 5);
一般需搭配 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)
释放顺序最好与申请顺序相反,以免产生内存碎块。