1、在32位平台,指针占4个字节,指针本身就是地址
int a =1;
int * p =&a;//一级指针
int **p =&p; //二级指针
2、指针运算
int aa[3] = { 1,2,3 };
int* pp = aa;
pp++;
实际上加了int的数据类型个字节那么pp++后的*pp值为2
3、指针函数 函数指针
函数指针 int (*add)(int a);
指针函数 int* add(int a);
1)、指针函数:是指函数的返回值类型是一个指针类型,本质是一个函数,如 int *function(void);这里可以认为是int* function(void);返回值是int*,是一个指针。
2)、函数指针:本质是一个指针,但是这个指针指向一个函数,这个指针就叫函数指针,如int (*function)(void)。
从这里就可以看出来,指针函数、函数指针两个名词就看后面两字就可以区别了,是函数还是指针。
另外,函数指针有两个用途:调用函数和做函数的参数。
[cpp]
int func(int x); //声明一个函数
int (*fp)(int x); //定义一个函数指针
fp = func; //将func函数的首地址赋值给指针fp
int func(int x); //声明一个函数
int (*fp)(int x); //定义一个函数指针
fp = func; //将func函数的首地址赋值给指针fp
3)、回调函数:就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。
int a =1;
int * p =&a;//一级指针
int **p =&p; //二级指针
2、指针运算
int aa[3] = { 1,2,3 };
int* pp = aa;
pp++;
实际上加了int的数据类型个字节那么pp++后的*pp值为2
3、指针函数 函数指针
函数指针 int (*add)(int a);
指针函数 int* add(int a);
1)、指针函数:是指函数的返回值类型是一个指针类型,本质是一个函数,如 int *function(void);这里可以认为是int* function(void);返回值是int*,是一个指针。
2)、函数指针:本质是一个指针,但是这个指针指向一个函数,这个指针就叫函数指针,如int (*function)(void)。
从这里就可以看出来,指针函数、函数指针两个名词就看后面两字就可以区别了,是函数还是指针。
另外,函数指针有两个用途:调用函数和做函数的参数。
[cpp]
int func(int x); //声明一个函数
int (*fp)(int x); //定义一个函数指针
fp = func; //将func函数的首地址赋值给指针fp
int func(int x); //声明一个函数
int (*fp)(int x); //定义一个函数指针
fp = func; //将func函数的首地址赋值给指针fp
3)、回调函数:就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。
4、如果一个指针赋值给另一个指针,然后把这个指针=NULL,那么另外一个指针还是有值的,因为地址没有为NULL
int a = 1; int * p = &a; int *s = p; a = 2; p = NULL; getchar();