1.1.1 无类型指针
定义一个指针变量,但不指定它指向具体哪种数据类型。可以通过强制转化将void *转化为其他类型指针,也可以用(void *)将其他类型指针强制转化为void类型指针。
void *p
1.1.2 NULL
NULL在C/C++标准库中被定义为一个宏,一般为:
#define NULL ((void*)0) 空指针指向0地址
1.1.3 空指针与野指针
指向NULL的指针叫空指针,没有具体指向任何变量地址的指针叫野指针
函数放在代码区,函数名就是地址. 定义:返回类型 ( *p ) (参数类型)=函数名,调用:p(实参)。 int add(int a,int b) int (*p)(int,int)=add;
在回调函数和运行期动态绑定的时候大量的用到了指向函数的指针。
回调函数举例,因为该函数不知道该调用哪个函数,所以只能把函数当做参数来传递。有了函数指针的概念就可以把函数作为一个参数来传给另一个函数
typedef int(*p)(int, int) // 函数指针类型 p ( typedef 类型 变量名 变量名就成了该类型的别名)
void func(int(*p)(int, int), int a, int b)
{
int res = p(a, b);
printf("%d\n", res);
}
int buf[3][5] | 二维数组名称,buf代表数组首地址 |
int (*a)[5] | 定义一个指向int [5]类型的指针变量a |
a[0], *(a + 0), *a | 0行,0列元素地址 |
a + 1 | 第1行首地址 |
a[1], *(a + 1) | 第1行,0列元素地址 |
a[1] + 2, *(a + 1) + 2, &a[1][2] | 第1行,2列元素地址 |
*(a[1] + 2), *(*(a + 1) + 2), a[1][2] | 第1行,2列元素的值 |