第八章指针 第八章指针 8.1指针的概念与定义 82指针作函数参数 83指针与数组 84指针与涵数 85复杂指钍 BACK
第八章 指 针 第八章 指 针 8.1 指针的概念与定义 8.2 8.3 8.4 指针与函数 8.5 复杂指针
第八章指针 81指针的概念与定义 811指针的概念 3000 60006001 F 3000 (a)变量c (b)指针pc 图8.1内存分配表
第八章 指 针 8.1 指针的概念与定义 8.1.1 指针的概念 图 8.1 内存分配表
第八章指针 812指针的定义及使用 1.指针的定义 指针是一种存放地址值的变量,像其它变量一样,必 须在使用前定义。指针变量的命名遵守与其它变量相同的 规则,即必须是唯一的标识符。指针定义的格式如下: 类型名*指针名;
第八章 指 针 8.1.2 1. 指针是一种存放地址值的变量,像其它变量一样,必 须在使用前定义。指针变量的命名遵守与其它变量相同的 规则, 即必须是唯一的标识符。指针定义的格式如下: 类型名 *指针名;
第八章指针 例81指针与非指针的定义 char*pcl,*pc2;/*pcl和pc2均为指向char型的指针*/ foat*pf, percent;/*p是foat型的指针,而 percent为普通的foat型变量*/ 例8.2指针的指向 int point; scanf("%d", point)
第八章 指 针 例 8.1 指针与非指针的定义 char *pcl, *pc2; /* pcl和pc2均为指向char型的指针*/ float *pf, percent;/* pf是float型的指针,而percent为普通的float型变量*/ 例 8.2 指针的指向 int *point; scanf("%d", point);
第八章指针 2.指针的有关运算符 两个有关的运算符 &:取地址运算符。 *:指针运算符(或称“间接访问”运算符)。 例如:&a为变量a的地址,*p为指针p所指向的存贮单 元的内容。 &运算符只能作用于变量,包括基本类型变量和数组的 元素、结构体类型变量或结构体的成员(第九章),不能 作用于数组名、常量或寄存器变量。例如:
第八章 指 针 2. 指针的有关运算符 两个有关的运算符: &: 取地址运算符。 *: 指针运算符(或称“间接访问”运算符)。 例如:&a为变量a的地址, *p为指针p所指向的存贮单 元的内容。 &运算符只能作用于变量,包括基本类型变量和数组的 元素、 结构体类型变量或结构体的成员(第九章), 不能 作用于数组名、 常量或寄存器变量。 例如:
第八章指针 doubler, a [20] int 1 register int k 表达式&r、&a[0]、&a[门]是正确的,而&(2*r) &a、&k是非法表示。 单目运算符*是&的逆运算,它的操作数是对象的地址,* 运算的结果是对象本身。单目*称为间访运算符,“间访” 就是通过变量的地址而不是变量名存取(或引用)变量。例 如,如果pc是指向字符变量c的指针,则*&c)和*pc表示同 字符对象c。因而赋值语句 *(&C)a pc a 效果相同,都是将a'存入变量c。 c=a
第八章 指 针 double r, a[20]; int i; register int k; 表达式&r、 &a[0]、 &a[i]是正确的, 而&(2*r)、 &a、&k是非法表示。 单目运算符*是&的逆运算,它的操作数是对象的地址, * 运算的结果是对象本身。 单目*称为间访运算符, “间访” 就是通过变量的地址而不是变量名存取(或引用)变量。例 如, 如果pc是指向字符变量c的指针,则*(&c)和*pc表示同 一字符对象c。因而赋值语句 *(&c)=′a′; *pc=′a′; c=′a′; 效果相同,都是将′a′存入变量c
第八章指针 例8.3取地址运算符 int variable, *point point=&variable
第八章 指 针 例 8.3 取地址运算符。 int variable, *point; point=&variable;
第八章指针 3.指针的使用 例8.4指针的使用。 mal fint a, b, * pl, * p2; a=10:b=20: pI=&a; p2=&b printf("%d t%dn"*pl, p2); 1=&b;p2=&a printf(%d%dn",'pl, p2); 程序运行结果 1020 2010
第八章 指 针 3. 指针的使用 例 8.4 指针的使用。 main( ) {int a, b, *p1, *p2; a=10; b=20; p1=&a; p2=&b; printf("%d\t%d\n", *p1, *p2); p1=&b; p2=&a; printf("%d\t%d\n", *p1, *p2); } 程序运行结果: 10 20 20 10
第八章指针 程序说明: (1)在两个 printf函数调用语句中的*是指针运算符,这 单目运算符的运算对象应该是指针或地址,它的作用是得 到指针指向变量的值。 (2)在第一个prnt函数调用时,可以偎设内存的分配如 图8.2所示。 2000200120022003 2020202120222023… 10 20 2000 2002 变量a变量b 指针p!指针p2 图82内存分配表
第八章 指 针 程序说明: (1) 在两个printf函数调用语句中的*是指针运算符,这一 单目运算符的运算对象应该是指针或地址, 它的作用是得 到指针指向变量的值。 (2) 在第一个printf函数调用时, 可以假设内存的分配如 图8.2所示。 图 8.2 内存分配表
第八章指针 (3)在第二个prnt函数调用时,内存的分配将如图83所示。 2000200120022003…,2020202120222023… 10 20 ●t 2002 2000 变量a变量b 指针p1指针p2 图8.3内存分配表
第八章 指 针 (3) 在第二个printf函数调用时,内存的分配将如图8.3所示。 图 8.3 内存分配表