DAY6/7指针专题重点笔记:
取地址运算,一切都是地址“&”
&不能对没有地址的东西取地址:&(a+b)? ;&(a++)?;&(++a)?
互相反作⽤*&yptr -> * (&yptr) -> * (yptr的地址)-> 得到那个地址上的变量 -> yptr
&*yptr -> &(*yptr) -> &(y) -> 得到y的地址,也就是yptr -> yptr
- 内存以字节byte(8bit)为单位,开始编号,称之为地址
- 内存的地址称为指针 int *p; 申明一个指针
- 指针的数据类型必需与目标一至 int a = 10; p = &a;
- 指针存目标地址,变量取地址&,存放地址的指针名称为指针变量
- *p 通过指针取出目标值 printf("%d", *p);
- p 一个指针变量, *p 指针目标的值 &p 指针的地址
- 指针大小跟据系统位数改变大小 sizeof()
- 指针运算是对地址量进行计算,主要是 + - ++ – = 和逻辑运算符
- 两个指针相减得到一个整数是数据的个数,而不是地址量
- 指针关系运算是对指向地址进行比较
- 返回0(nil)NULL为空
- 行指针变量,叫做行指针变量。
- 字符指针,字符串指针
- 指针数组,由若干个类型相同指针变量构成的集合
- 指针展开表达式
- 多级指针,指向指针的指针叫做多级指,
- void指针,在没有强制转换之前不能进行算术运算
- const修饰符,修饰谁谁变常量
- *是因为出现在赋值号左边的不是变量,⽽是值是特殊的值,所以叫做左值
数组变量是特殊的指针
- 数组变量本⾝表达地址,所以
• int a[10]; int*p=a; // ⽆需⽤&取地址
• 但是数组的单元表达的是变量,需要⽤&取地址
• a == &a[0] - []运算符可以对数组做,也可以对指针做:
• p[0] <> a[0]
• *运算符可以对指针做,也可以对数组做:
• *a = 25;
• 数组变量是const的指针,所以不能被赋值
• int a[] <> int * const a=….