Skip to content

2 指针

  • int (*p)[4] 是行指针变量,p[0]+1 指向的是同一行的下一个元素, p+1p[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)

释放顺序最好与申请顺序相反,以免产生内存碎块。