指针

指针就是地址。

只有内存变量才可以去地址,常量寄存器变量不可以。

例如:

&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];

results matching ""

    No results matching ""