第8章指针 8,1指针概念 8,2变量的指针和指向变量的指针变量 83指针变量的定义 84指针变量的引用 8.5指针与数组 86字符串的指针和指向字符串的指针变量 8.7指针与函数 88指向结构体类型数据的指针 89动态数据结构
第 8 章 指 针 8.1 指针概念 8.2 变量的指针和指向变量的指针变量 8.3 指针变量的定义 8.5 指针与数组 8.4 指针变量的引用 8.6 字符串的指针和指向字符串的指针变量 8.7 指针与函数 8.8 指向结构体类型数据的指针 8.9 动态数据结构
第8章指针 81指针概念 指针是c的一个重要概念。其特点是: 能有效地表示复杂的数据结构;能动态地分配内存,直 接处理内存地址;能方便、有效地使用字符串和数组; 能在调用函数后获得多个值。 C中定义的变量,在编译时按变量的类型来分配 定长度的内存单元。在运行时,根据变量名与地址的对 应关系,相应地存取变量的数据。这种按变量地址存取 变量值的方法称为“直接访问”方式。 如果变量的地址也存放在某一个内存单元,则存取 方式为先找到存放变量的地址单元,再取变量的值,这 种方式称为“间接访问”方式如: p=&i;将变量的地址存放到变量p"指向”的内存单元
第 8 章 指 针 8.1 指针概念 指针是C的一个重要概念。其特点是: 能有效地表示复杂的数据结构;能动态地分配内存,直 接处理内存地址;能方便、有效地使用字符串和数组; 能在调用函数后获得多个值。 C中定义的变量,在编译时按变量的类型来分配一 定长度的内存单元。在运行时,根据变量名与地址的对 应关系,相应地存取变量的数据。这种按变量地址存取 变量值的方法称为“直接访问”方式。 如果变量的地址也存放在某一个内存单元,则存取 方式为先找到存放变量的地址单元,再取变量的值,这 种方式称为“间接访问”方式。如: p=&i; 将变量i的地址存放到变量p “指向”的内存单元中
8.2变量的指针和指向变量的指针变量 变量的指针就是变量的地址,即p用户数据区 的值。也就是说,指针变量的值就是该 指针变量所指变量的内存首地址。 20003变量i 在p的前面加上一个“”,即p20215 表示指针变量p所指向的变量。 从右图可知: 如p也是一个变量,且与变量是同30102000变量p 回事。 i=3; p=&i; p=3;将3赋给指针变量p所指向的变量,与i=3等价
8.2 变量的指针和指向变量的指针变量 变量的指针就是变量的地址,即p 的值。也就是说, 指针变量的值就是该 指针变量所指变量的内存首地址。 在p的前面加上一个“ * ”,即*p就 表示指针变量p所指向的变量。 从右图可知 : *p也是一个变量,且与变量i是同 一回事。 i = 3; p=&i; *p=3; 将3赋给指针变量p所指向的变量,与i=3等价 用户数据区 2000 3 变量 i 2002 6 变量 j 2004 9 变量 k 3010 2000 变量 p
83指针变量的定义 定义形式: 类型标识符*标识符; p1 *p1 指针变量必须定义为“指针类型”如: int i, j; p2*p2 int*p1, *p2; 口口j p1=&i;p2=&j; p1,p2为指向整型变量i,j的指针变量。 说明:①类型可以是整型、实型、字符型等。 ②标识符前的“*”表示该变量为指针变量。 ③指针变量只能指向同一类型的变量。 ④上述的指针变量是p1、p2,而不是*1、*p2。 *p1和*p2是p1和p2所指向的变量i和j ⑤指针变量中只能存放地址。p1=100;是非法的
8.3 指针变量的定义 定义形式: 类型标识符 *标识符; 指针变量必须定义为“指针类型”。如: int i, j; i j int *p1, *p2; p1 p2 p1=&i; p2=&j; p1, p2 为指向整型变量 i, j 的指针变量。 说明: 类型可以是整型、实型、字符型等。 标识符前的 “*” 表示该变量为指针变量。 指针变量只能指向同一类型的变量。 上述的指针变量是p1、p2,而不是 *p1、 *p2。 *p1 和 *p2 是 p1 和 p2 所指向的变量i和 j。 *p1 *p2 指针变量中只能存放地址。p1=100; 是非法的
84指针变量的引用 与指针有关的运算符 &取地址运算符如:&a为变量a的地址 *指针运算符如:*p为指针变量p所指向的变量 ①*运算和&运算互为逆运算。 ②指针变量p的内容为地址量;*p为指针p的目标量,内 容为数据,即指针变量p所指向的变量的值。 ③*p=i;是将变量i的值赋给目标变量*p。 ④&p为指针变量p的地址。 ⑤&(p)的结果为p,即变量*p也就是变量x的地址 ⑥*(&)表示访问变量i的 p 地址,结果就是i本身。 入 &p区x 至此,你应该明白了 p、p和&p的意义
8.4 指针变量的引用 与指针有关的运算符: & 取地址运算符 如:&a 为变量 a 的地址 指针运算符 如:*p为指针变量p所指向的变量 运算和 & 运算互为逆运算。 指针变量p的内容为地址量; p *p x *p=i; 是将变量 i 的值赋给目标变量*p。 i &p为指针变量 p 的地址。 &p &(*p)的结果为p,即变量*p也就是变量x的地址。 *(&i) 表示访问变量 i 的 地址,结果就是 i 本身。 至此,你应该明白了 p、 *p和&p的意义。 &x *p为指针p的目标量,内 容为数据,即指针变量 p所指向的变量的值