1.指针
指针就是地址;
地址:在内存空间当中, 以字节作为基本单位, 每一个字节都有一个独一无二的编号, 这个编号就是地址。
指针变量:存放地址的变量
在不影响的前提下,把地址、指针变量都叫指针
指针变量:
存储类型 数据类型 *指针变量名;
int *p;
sizeof(int *) ---> 8字节
sizeof(char *) ---> 8字节
eg:
int a = 10;
int *p;
p = &a;
初始化:
int a = 10;
int *p = &a;
赋值:
int a = 10;
int b = 20;
int *p;
p = &a;
p = &b;
int *p; --> 野指针
int *p = NULL;
*:取内容符 (操作符)
int a = 10;
int *p = &a;
printf("%d\n", *p);
2.大端序和小端序
大端序:低位数据放在高地址
小端序:低位数据放在低地址
int a = 0x01020304;
char *p = &a;
printf("%d\n", *p); ---> 4
3.指针支持的运算
p + n: 以p指向位置作为基准,往高地址方向偏移n个元素, sizeof(元素类型) * n 个字节数
p - n: 以p指向位置作为基准,往低地址方向偏移n个元素, sizeof(元素类型) * n 个字节数
p++: 以p指向位置作为基准,往高地址方向偏移n个元素, sizeof(元素类型) * n 个字节数 , 指针指向偏移后 的地址
p--: 以p指向位置作为基准,往低地址方向偏移n个元素, sizeof(元素类型) * n 个字节数 , 指针指向偏移后 的地址
p - q: 结果为中间间隔的元素个数; 必须是同种类型的指针
逻辑运算
真假:
NULL 为假, 非NULL 为真; NULL 是 零地址的宏。
关系运算
> < >= <= == !=
变址运算符:[]
int a[5] = {1,2,3,4,5};
int *p = a;
int *p;
p = a;
p[i] == *(p + i) == a[i] == *(a + i)
& *:互为逆运算