第八章——善于利用指针

章节结构

  • 指针是什么
  • 指针变量
    • 使用指针变量的一个例子
    • 怎样定义指针变量
    • 怎样引用指针变量
    • 指针变量作为函数参数
  • 通过指针引用数组
    • 数组元素的指针
    • 在引用数组元素时指针的运算
    • 通过指针引用数组元素
    • 用数组名作函数参数(以及用数组名与变量名作为函数参数的比较)
    • 通过指针引用多维数组
      • 多维数组元素的地址
      • 指向多维数组元素的指针变量
      • 用指向数组的指针作函数参数
  • 通过指针引用字符串
    • 字符串的引用方式
    • 字符指针作函数参数
    • 使用字符指针变量和字符数组的比较
  • 指向函数的指针
    • 什么是函数的指针
    • 用函数指针变量调用函数
      • 通过函数名调用函数
      • 通过指针变量调用他所指向的函数
    • 怎样定义和使用指向函数的指针变量
    • 用指向函数的指针作函数参数
  • 返回指针值的函数
  • 指针数组和多重指针
    • 什么是指针数组
    • 指向指针数组的指针变量
    • 指针数组作main函数的形参
  • 动态内存分配与指向它的指针变量
    • 什么是内存的动态分配
    • 怎样建立内存的动态分配
      • 使用malloc函数开辟动态存储区
      • 用calloc函数开辟动态存储区
      • 用realoc函数重新分配动态存储区
      • 用free函数释放动态存储区
    • void指针类型
  • 有关指针的小结
    • 首先要准确理解指针的含义
    • 在C语言中,所有数据都是优劣性的
    • 要区分指针和指针变量
    • 什么叫“指向”
    • 要深入掌握在对数组的操作中正确的使用指针
    • 有关指针变量的归纳比较
    • 指针运算
    • 指针变量可以有空值

指针是什么

地址指向变量单元。地址就被形象化的称为指针。意思就是通过指针就能找以它为地址的内存单元。
对于C语言来说,除了地址还要知道数据类型才能找到相应的内存单元。

存储单元的地址存储单元的内容这两者的区别一定要弄清楚。 两种访问变量的方式:

  • 直接访问:按变量名进行的访问
  • 间接访问:即将变量的地址存放在另一变量中,然后通过访问另一变量来找到该变量的地址,从而访问该变量。

指向就是通过地址来体现的。

由于通过地址能够找到所需的变量单元。因此,可以说地址指向该变量单元

指针变量:专门用来存放另一变量的地址(即指针)的变量

指针变量就是地址变量,用来存放地址,指针变量的值就是地址(即指针)

指针VS指针变量 可以说,变量i的指针是2000,但不能说i的指针变量是2000。
指针是一个地址,而指针变量是存放地址的变量。

指针变量

指针变量:存放地址的变量,它用来指向另一对象(如变量、数组、函数等)

怎样定义指针变量

定义指针变量的一般形式: 类型名 * 指针变量名
类型名在此处又可以称之为基类型。指针变量的基类型用来指定辞职真变量可以指向的变量的类型。

在定义指针变量时要注意

  • (1)指针变量前面的“ * ”表示该变量为指针类型变量。
  • (2) 在定义指针变量时必须指定基类型
    • 一个变量的指针的含义包括两个方面
      • 以存储单元编号表示的纯地址(如编号2000的字节)
      • 它指向的存储单元的数据类型(如int,char等)
  • (3)如何表示指针类型。指向整型数据的指针类型表示为int *,读作“指向int的指针”,简称“int指针”
  • 指针变量中只能存放地址(指针),不要讲一个整数赋给一个指针变量

怎样引用指针类型变量

在应用指针变量时,可能有3种情况

  • (1)给指针变量赋值 int * p;p = &a //此处表明a为普通的int变量,p为int指针
  • (2)引用指针变量指向的变量 printf("%d",*p)// 此处为解指针,得到的是指针p指向的变量的值
  • (3)引用指针变量的值(是一个地址)printf("%o",p);

星号* 有两种含义,在定义时,表示类型,为指针类型。在其他地方时,则表示指针运算符
& 取指针运算符

指针变量作为函数参数

函数参数不仅可以是整形、浮点型、字符型等数据,还可以是指针类型。他的作用是将一个变量的地址传送到另一个函数中。

不能企图通过改变指针形参的值而使指针参数的值改变
不能通过执行调用函数来改变实参指针变量的值,但是可以改变实参指针变量所指向变量的值

通过指针引用数组

数组元素的指针

  • 所谓数组元素的指针就是数组元素的地址
  • 引用数组元素可以使用下标法,也可以用指针法
  • 数组名就是数组的地址。数组首元素的地址也就是数组的地址
    假设p为指向数组的指针,a为数组名则有:p=ap=&a[0]
定义指针变量时可以同时对其初始化
int * p = &a[0];
等效于
int * p;
p = &a[0];
或
int * p;
p = a;  // a为数组名

在引用数组元素时指针的运算

在指针已指向一个数组元素时,就可以对指针进行以下运算
加一个整数(用+或+=),如p+1;
减一个整数(用-或-=),如p-1;
自加运算,如++p,p++;
自减运算,如--p,p--; 两个指针相减,如p1 -p2(只有p1和p2都指向同一数组中的元素时才有意义,表示p1和p2之间相差多少元素)

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部