第八章——善于利用指针(一)——指针和指针变量

原创
2020/10/17 13:58
阅读数 17

章节结构

  • 8.1 指针是什么
  • 8.2 指针变量
    • 8.2.1使用指针变量的一个例子
    • 8.2.2 怎样定义指针变量
    • 8.2.3 怎样引用指针变量
    • 8.2.4 指针变量作为函数参数

8.1 指针是什么

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

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

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

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

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

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

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

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

8.2.2 指针变量

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

8.2.2 怎样定义指针变量(4条)

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

在定义指针变量时要注意

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

8.2.3 怎样引用指针类型变量

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

  • (1)给指针变量赋值 int * p;p = &a //此处表明a为普通的int变量,p为int指针
  • (2)引用指针变量指向的变量 printf("%d",*p)// 此处为解指针,得到的是指针p指向的变量的值
  • (3)引用指针变量的值(是一个地址)printf("%o",p);
  • & 取地址运算符。&a是变量a的地址
  • * 指针运算符(或称间接访问运算符),* p代表指针变量p指向的对象
  • 星号* 有两种含义,在定义时,表示类型,为指针类型。在其他地方时,则表示指针运算符
    & 取指针运算符

8.2.4指针变量作为函数参数

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

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

这表示指针变量本身不能被改变,因为指针变量代表的是地址,因此指针变量的值是不可改变的左值;而指针变量所指向变量,是可以改变的,因此可以改变指针变量所指向变量的值。

void swap(int *p1,int *p2)
// 这是想通过执行调用函数来改变指针变量本身的值,这是行不通的
{
p = p1;
p1 = p2;
p2 = p;
}
`void swap1(int * p1,int *p2)  
// 通过调用函数改变实参指针变量所指向变量的值
{
int temp;
temp = *p1;
*pt1 = * pt2;
*pt2 = temp;
}

int * p 指向p的指针
&a 变量a的地址
a = * p; 指针变量p指向的对象

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