第10章第1节 第十章指针 C集高级语言和低级语言的特点于一身 计算,处理数据 应用软件 控制硬件 访问内存地址 大型应用软件、 操作系统 应用于指针 表示数据结构 §10.1指针的概念 指针 即“地址”。即某个变量在内在中的存放地址 源程序中的任何变量,在程序编译后,实质上变量是不存在的,而是在内存 中的某一区块(数据区),划出某一些单元(如:int2个Byte,foat4个Byte等) 来存放变量的数值(用二进制数表示),这些单元都有唯一的编号地址。系 统规定了变量与这些地址的对应关系(对于多字节数据,选取第一个单元的地 址—首地址)。在这些单元中存取数据,就相当于引用了对应的变量。 对应 变量 地址 变量的值 该地址对应单元 中存放的数据
第10章第1节 C集高级语言和低级语言的特点于一身 计算,处理数据 控制硬件 访问内存地址 表示数据结构 应用软件 大型应用软件、 操作系统 指针 应用于 §10.1 指针的概念 一. 指针 —— 即“地址”。即某个变量在内在中的存放地址 源程序中的任何变量,在程序编译后,实质上变量是不存在的,而是在内存 中的某一区块(数据区),划出某一些单元(如:int 2个Byte, float 4个Byte等) 来存放变量的数值(用二进制数表示),这些单元都有唯一的编号——地址。系 统规定了变量与这些地址的对应关系(对于多字节数据,选取第一个单元的地 址——首地址)。在这些单元中存取数据,就相当于引用了对应的变量。 变量 地址 一一对应 变量的值 该地址对应单元 中存放的数据
第10章第1节 二直接寻址与间接寻址 寻址根据地址来存、取某个变量对应的数据方法 1、直接寻址—根据变量与地址的对应关,用变量名直接引用数据 例: 2005 (0 系统自动分配的单元 2004 d int x, y, z; 2003 2002 y scanf(%od, %dn,"&x, &y) 2001 TXt; printf((“%d”,) 2000 从键盘输入两个整数放入地址为 2000、2001和2002、2003中 从20002001和2002、2003单元中取 出数据,送CPU相加,结果放入2004、 2005单元中 从2004、2005中取出数据,送显示 器输出
二. 直接寻址与间接寻址 第10章第1节 寻址——根据地址来存、取某个变量对应的数据方法。 1. 直接寻址——根据变量与地址的对应关,用变量名直接引用数据 例: mian() { int x,y,z; scanf(“%d,%d\n,”&x,&y); z=x+y; printf(“%d”,z); } 2005 2004 2003 2002 2001 2000 z y x 从键盘输入两个整数,放入地址为 2000、2001和2002、2003中 从2000、2001和2002、2003单元中取 出数据,送CPU相加,结果放入2004、 2005单元中 从2004、2005中取出数据,送显示 器输出 系统自动分配的单元
第10章第1节 2.间接寻址将变量x的地址放在另一地方(即放在另一个变量计中,这个 变叫“指针变量”),故要读取x的数据,需先读取i的数值(即x的地址), 然后根据x的地址值,再读取x的数据。 20002001 20022003 20042005 指向 指向 指向 5000 5100 5200 2000 2002 k 2004 mainO finex, y, z; int *i, i, * k; &x; j=&y; k&z scanf(“%od,%d”,&x,&y); 相当于 k=(*i)+(2j); printi(“%d”,k);} printi(%od”,z); jk——存放地址的变量,叫“指针变量”。又因为上述地址是变量的 地址,故称ik为“指向变量的指针变量
2. 间接寻址——将变量x的地址放在另一地方(即放在另一个变量i中,这个 变叫“指针变量”),故要读取x的数据,需先读取i的数值(即x的地址), 然后根据x的地址值,再读取x的数据。 第10章第1节 2000 2001 2002 2003 2004 2005 x y z i 2000 j 2002 k 2004 5000 5100 5200 main() {int x,y,z; int *i,*j,*k; i=&x; j=&y; k=&z; scanf(“%d,%d”,&x,&y); *k=(*i)+(*j); printf(“%d”,*k); } 相当于 z=x+y; printf(“%d”,z); i,j,k —— 存放地址的变量,叫“指针变量”。又因为上述地址是变量的 地址,故称i,j,k为“指向变量的指针变量”。 指向 指向 指向
第10章第2节 §10.2变量的指针和指向变量的指针变量 指针变量的定义 1形式 类型符半指针变量名; 与一般变量的命名相同 表示指针变量中存放的是一个整型变量的地址, 即指针变量指向整形数据。称为基类型 例:int*x; 表示定义了一个指针变量,该变量指向整形 数据。(即x中只能放整形变量的地址。) 指针变量的引用——引用指针变量通常需借助两个专用的运算符 址运 L运算符,指什运算(间接访运算,职根地址值访 问变量。(*一后面跟指针变量)
§10.2 变量的指针和指向变量的指针变量 第10章第2节 一. 指针变量的定义 1.形式 类型符 *指针变量名; 与一般变量的命名相同 表示指针变量中存放的是一个整型变量的地址, 即指针变量指向整形数据。称为基类型 例: int *x; ——表示定义了一个指针变量,该变量指向整形 数据。(即x中只能放整形变量的地址。) 二. 指针变量的引用——引用指针变量通常需借助两个专用的运算符 1. 运算符 &——取地址运算符。 (&——后面跟变量名) *——指针运算符(间接访问运算符)。即:根据地址值访 问变量。(*—— 后面跟指针变量)
第10章第2节 mainO Rint x, y, z; int * i, "j,*k; 定义指针变量i,j,k i=&x;j=&y;k=&z; 将变量的地址赋给指针变量,则: scanf(“%od,%d”,&x,&y); i→x,j→y,k→z k=(*)+(j); 指根地址,取数据参加运算,即z=x+y; printf(“%d”,k); 即: printf((“%d”,z) 2.说明 *&的优先级相同,右结合,互为逆运算 例:如有: int x,y; int *1, j; i=&x; j=&y; &*i→&(i)→&x &x→(&x) x十十 +→1+(指钟变量的值发生变化
&*i &(*i) &x i *&x *(&x) *i x main() {int x,y,z; int *i,*j,*k; i=&x; j=&y;k=&z; scanf(“%d,%d”,&x,&y); *k=(*i)+(*j); printf(“%d”,*k); } 定义指针变量i,j,k 将变量的地址赋给指针变量,则: i→x,j→y,k→z 指根地址,取数据参加运算,即z=x+y; 2. 说明 * & 的优先级相同, 右结合,互为逆运算 例: int x,y; int *i,*j; i=&x; j=&y; a) b) (*i)++ x++ *i++ *(i++) *i x i=i+1(指针变量的值发生变化) 即: printf(“%d”,z); 第10章第2节 如有: