<十> 指针

终于写到指针了,真是太不容易了,我觉得,指针对于C来说太重要了!真的非常非常重要!

为什么需要指针

指针解决了一些编程中基本的问题。

  1. 指针的使用使得不同区域的代码可以轻易的共享内存数据。当然你也可以通过数据的复制达到相同的效果,但是这样往往效率不太好,因为诸如结构体等大型数据,占用的字节数多,复制很消耗性能。但使用指针就可以很好的避免这个问题,因为任何类型的指针占用的字节数都是一样的(根据平台不同,有4字节或者8字节或者其他可能)。
  2. 指针使得一些复杂的链接性的数据结构的构建成为可能,比如链表,链式二叉树等等。
  3. 有些操作必须使用指针。如操作申请的堆内存。还有:C语言中的一切函数调用中,值传递都是“按值传递”的,如果我们要在函数中修改被传递过来的对象,就必须通过这个对象的指针来完成。

指针是什么

我们指知道:
  • C语言中的数组是指 一类 类型,数组具体区分为  int 类型数组,double类型数组,char数组 等等。同样指针 这个概念也泛指 一类 数据类型,int指针类型,double指针类型,char指针类型等等。
  • 通常,我们用int类型保存一些整型的数据,如 int num = 97 , 我们也会用char来存储字符: char ch = 'a'。
  • 我们也必须知道:任何程序数据载入内存后,在内存都有他们的地址,这就是指针。而为了保存一个数据在内存中的地址我们就需要指针变量
  • 因此:指针是程序数据在内存中的地址,而指针变量是用来保存这些地址的变量

定义指针

  • int a = 10;
  • int *p = &a;
  • char b = ‘K’;
  • char *w = &b;

运算符

  • 1----  &
    • 取地址符:获取数据的内存地址

 

  • 2----  *
    • 1、定义指针变量时代表类型的一部分
    • 2、指针解引用:通过地址获取地址里的内容(钥匙)
    • 3、指针的降级(行指针-->列指针)
  • 3----  +-
    • 指针加减:加减的是单位长度。
    • 单位长度:由指向数据类型所占的字节数决定。
  • 4----  []
    • 指针加单位长度后,取内容运算
    • a[i] 《==》 *(a+i)

指针与数组

  • int a[5] = {0,1,2,3,4};   //a:20字节
  • int *p = a;             //p:4字节

p[3] <==> *(p+3)          //p是变量

a[3] <==> *(a+3)        //a是常量

数组指针

数组指针:本质是指针,专用于存储数组的地址多数用于指向二维数组
char a[3][4] = {0};
char (*p)[4] = a; //size == 4;

a[i][j]; <==> *(a[i]+j); <==> *(*(a+i)+j);
p[i][j]; <==> *(p[i]+j); <==> *(*(p+i)+j);

a:地址常量(不可写的内存地址值)
p:指针变量(专用于存储地址的变量)

数组指针

指针数组:本质是数组,元素是指针

int *p[3];

元素类型:int *
数组名字:p
元素个数:3

二级指针

short a = 10; //size == 2

short *p = &a; //size == 4

short **w = &p; //size == 4

  w <==> &p
 *w <==>   p   <==> &a;
**w <==> *p   <==>   a;

void

void *p;      //泛型指针,使用时需要强制类型转换

const

const int * p;    //常量化*p
int * const w;    //长量化w

NULL

NULL 《==》 0    //防止野指针的形成

posted on 2018-03-10 21:59  就是菁可爱哦  阅读(201)  评论(0编辑  收藏  举报

导航