函数指针 和 指针函数
函数指针 : 指向一个函数的指针
函数指针的定义的方法:
int (* p) (int , int);
指向函数的返回值类型 (* 指针变量名) (指向函数形参类型列表);
int sum (int a,int b)
{
}
=> int (*p) (int,int);
/
int * func(int a,int b)
{
}
=>int * (*p)(int ,int);
函数指针的指向:
指向函数的地址,函数中,函数名或者&函数名都可以当作函数的地址
int (*p)(int,int);
p=∑ 或者 p = sum; //sum为上面定义的函数
通过函数指针访问函数
(*p)(实参列表)
p (实参列表)
指针函数:
本质上是一个函数,只是返回值为一个指针
void * func(int ,int); 指针函数
void (* func)(int ,int);函数指针
二级指针和多级指针
指针指向的是一个地址,但它自己本身也是存在一个地址的,
这个时候就可以定义二级指针用来保存他的地址
int *p = &a;
int **q = &p;
int ***z = &q;
.............
不需要分清楚它是几级指针,需要做的是理解他是保存的谁的地址。
动态分配空间 (重点malloc)
malloc 申请空间
int *p = (int *)malloc(sizeof(*p));
分配空间,成功返回空间首地址,失败返回NULL;
空间一旦分配就不会消失,除非,进程消亡,或者手动调用free释放空间
free(p);
使用malloc需要注意可能回造成内存泄漏,就是你的指针指向了另一个空间
导致这个空间找不到了
calloc
void *calloc(size_t nmemb, size_t size);
calloc作用类似与malloc,不过它是给数组分配内存的
两个参数:
nmemb: 表示分配多少个元素
size: 表示每一个元素占多少个字节
realloc
void *realloc(void *ptr, size_t size);
realloc用来把ptr(由malloc/calloc/realloc返回的动态内存的地址)
指向的内存空间,扩展到size大小
超大数据运算(使用long int 都会越界的)
(1)超级大的数据你怎么取保存(char *)
(2)超级大的数值之间的+ - * /的实现
使用字符串 指针,做相对应的运算,加减都只需要后一位+1或-1,乘除运行较为麻烦
"11111123124165465465453165445615646546845"
"874643513513513546523263323265624655466"