1)指针定义
类型名 *指针变量名 datatype *name; 或 datatype * name = &value;
普通指针: int val =0; int* p= &val;
数组指针
int (*p) [3]; p+1-->12字节
使用:
int arr[3];
int* pointer = arr;poiner+1; 4字节
int (*p) [3] = &arr; //将arr看做整体
函数指针
int* p = &val; p = &a; p=&b;
*p =10;
int add(int a,int b) {return a+b;}
int mul(int a,int b) {return a*b;}
函数名含义:函数入口地址
指针定义:
int (*p)(int,int) = add;
add(1,2);
p=mul;
p(1,2); //调用mul函数
函数指针声明
typedef int (*PFun)(int,int);
PFun p = add;
p(1,2); //add(1,2)
p = mul;
p(1,2); //mul(1,2)
2) 普通指针使用
int val=0;
int* p = &val; p是整型变量指针,val是整型变量
*p=&val;
*p=1; 解引用
数组指针int arr[3];
int* pointer = arr;poiner+1; 4字节
int (*p) [3] = &arr; //将arr看做整体
3)判断大小端问题
大端字节序存储:(低高,高低)
把一个数据地位字节处的数据存放在高地址处,高位字节处的数据存放在低地址处。
小端字节序存储: (低低)
把一个数据地位字节处的数据存放在低地址处,高位字节处的数据存放在高地址处。
VS中使用小端存储
4)指针+-1能力
int* p; p+1; 指针偏移4字节;
char* p; p+1; 指针偏移1字节。
指针-指针
指针-指针的操作得到的是指针和指针之间元素的个数, 前提是两个指针必须指向同一块空间。
5)指针数组
定义一堆字符常量 --> 字符串常量 数组
*const char* arr[]={"abc","hello","world"};
6)指针与const结合
int * const p =&a; 限制指针本身, 指针变量本身的值不能被修改
const int *p = NULL; int const *p = NULL; 限制指针变量指向的数据
const int * const p = &a; 限制指针变量和指针变量指向的数据的值