7.1指针的基本概念

指针的作用:可以通过指针间接访问内存

  • 内存的地址编号是从0开始记录的,一般用16进制的数字表示
  • 可以利用指针变量来保存/记录地址

image.png
定义指针的语法: 数据类型指针名
因为想让指针p指向a 的地址,所以p需和a的数据类型一样
&是取址符 p=&a *意味着 p记录了变量a的地址

  1. int * p;
  2. p=&a;
  3. //上面两行也可以写成一行
  4. int*p=&a;

image.png
解引用:*p就等于p指向的那段内存里的数据
**
image.png

7.3指针所占内存空间

image.png

sizeof(int *) sizeof(p) sizeof(float *) ......

7.4空指针和野指针

image.png
空指针: int*p=NULL;
** p=100; (错误!!不可以访问!!)*
编号0~255的内存是系统占用的,不允许用户访问

image.pngimage.png

7.5 const修饰指针

image.pngimage.png
image.png
image.png
image.png
image.png
image.png

7.6指针和数组

image.png
image.png
image.png

7.7指针和函数

作用:利用指针作函数参数,可以修改实参的值

值传递

  1. void swap01(int a, int b)
  2. {
  3. int temp=a;
  4. a=b;
  5. b=temp;
  6. }
  7. int main()
  8. {
  9. int a=10;
  10. int b=20;
  11. swap01(a, b);
  12. }

地址传递(在函数体中修改实参的值)

  1. void swap02(int *p1, int *p2)
  2. {
  3. int temp=*p1;
  4. *p1=*p2;
  5. *p2=temp;
  6. }
  7. int main()
  8. {
  9. int a=10;
  10. int b=20;
  11. swap01(&a, &b);
  12. }

总结:不改变实参的值就用值传递,要改变实参的值就用地址传递

7.8指针,数组,函数