指针:是一种数据类型,简单来说就是是个变量,存放内存单元的地址。也就是说它能找到以它为地址的内存单元。
32位系统:任何类型的指针大小都为4个字节(因为内存 32/8 = 4)
64位系统:任何类型的指针大小都为8个字节(因为内存 64/8 = 8)
大小端
- 大端:低地址存放高数据
- 小端:低地址存放低地址

定义指针:int *p = NULL;
此时的 * 是和数据类型连接在一起为了说明p为一个int的指针。
定义指针必须赋值:指针变量同普通变量一样,使用之前不仅要定义说明, 而且必须赋予具体的值。未经 赋值的指针变量不能使用, 否则将造成系统混乱,甚至死机
解引用:*p = &a;
此时的 * 是一个操作符(解引用);指针的类型决定了,对指针解引用的时候有多大的权限(能操作几个字节)。 比如: char* 的指针解引用就 只能访问一个字节,而 int* 的指针的解引用就能访问四个字节。
**void ***:它可以接受任何类型地址,但不能进行解引用,因为void没有具体大小
指针±整数:指针向前或向后;指针的类型决定指针向前或向后一步有多大
指针-指针:两个指针必须指向同一块内存,结果为相差中间数据的个数
指针的关系运算:允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置的指针比较,但是不允许与指向第一个 元素之前的那个内存位置的指针进行比较
指针和数组:
- 数组名表示的是元素首元素的地址
- &数组名表示整个数组的地址
- sizeof(arr)–>整个数组的字节大小
数组指针:指向数组的指针
指针数组:存放指针的数组
指向常量的指针:
指针可以改变,但是不可以通过解引用改变指针指向的值;
int a= 10;
const int * p =&a;
p//可以改变
*p//不可以变
常量指针:
指针本身不可以改变,但是指针指向的值可以改变
int a= 10;
int * const p =&a;
p//不可以改变
*p//可以改变
提问:那const int const p;中p与p可以修改吗?
答:都不可以修改
指针函数:返回值为指针类型的函数;
注意:不要返回局部变量的指针
char *getWord(char c); //这个函数的声明;
函数指针:指向函数的指针
int f(int a)
{
return a*a;
}
int (*p)(int) = f ;
int (*p1)(int) = &f;//两者相等