指针
指针就是地址。
只有内存变量
才可以去地址,常量
和寄存器变量
不可以。
例如:
&4 //整数常量不可以
register int i;
&i //寄存器变量,不可以
1、定义指针: 存储类型 数据类型 * 标识符;
例如:
static int *p;
int *p;
任何指针类型的大小都是固定的,并且与平台相关(32bit下是4字节)
例如:
sizeof(int *) == 4;
sizoef(char *) == 4;
sizeof(struct student *) == 4;
2、指针运算
- 算术运算:
指针和整数: + - //指针加整数往高地址偏移,指针减整数往低地址偏移
相同类型的指针和指针: - //指针减指针,结果是两者之间相差元素个数,而不是字节数
单目指针: ++ -- //等同于 p = p + 1;
- 关系运算:
相同类型指针和指针: > >= < <= == != //指针的关系运算目的是比较两个相同类型指针地址的高低
逻辑运算:全部可以(逻辑运算跟类型无关,任何数据都可以进行逻辑运算:非0为真,0为假)
位运算:不可以(位运算对于指针而言没有意义,因此不可以运算)
赋值运算:
相同类型指针和指针: =
指针 和 整数: += -=
- 其他:
* //直接访存
[] //偏移访存
-> //结构体指针访问成员
& //取内存变量的地址
tips:
中括号表达式的含义: a[b] == (a+b) == (b+a) == b[a];