本次课内容:指针概念 教学目的:掌握指针的相关概念、地址、指 针、基类型;指针变量的定义,引用。 重点:相关概念、定义、引用。 难点:指针的指向、存储单元地址与存储单 元内容、存储单元地址的存储
本次课内容:指针概念 教学目的:掌握指针的相关概念、地址、指 针、基类型;指针变量的定义,引用。 重点:相关概念、定义、引用。 难点:指针的指向、存储单元地址与存储单 元内容、存储单元地址的存储
、地址与指针 地址与取地址运算 地址:存储区域(内存)中第一个字节的编号。 计算机内存是以字节为单位的一片连续的存储空间,每一个字 节都有一个编号,这个编号就称为内存地址。 内存中的存储空间是连续的,内存中的地址号也是连续的,并 用二进制数来表示(为方便描述,我们采用十进制表示地址)。 在程序中定义了一个变量,C就会在内存为其分配一定字节的 内存空间。 注:如:inta,b; float x; 1010 3 a=3,b=4 1012 4 x=86; 1014 此时,a分配的单元为两个字节,第一个 字节的编号是1010,故的地址为1010。1216 同理,变量b的地址为1012,变量x的地1218 址为1216。 1220 变量的地址用&运算符进行运算。 如:&a的结果为:1010。地址1010中的内容是3
一、地址与指针 1、地址与取地址运算 地址: 存储区域(内存)中第一个字节的编号。 计算机内存是以字节为单位的一片连续的存储空间,每一个字 节都有一个编号,这个编号就称为内存地址。 内存中的存储空间是连续的,内存中的地址号也是连续的,并 用二进制数来表示(为方便描述,我们采用十进制表示地址)。 在程序中定义了一个变量,C就会在内存为其分配一定字节的 内存空间。 注:如:int a,b;float x; a=3,b=4; x=8.6; 此时,a分配的单元为两个字节,第一个 字节的编号是1010,故a 的地址为1010。 同理,变量b的地址为1012,变量x的地 址为1216。 变量的地址用&运算符进行运算。 如:&a 的结果为:1010。 地址1010中的内容是3。 1010 1012 1014 1216 1218 1220 a b x 3 4 8.6
程序中对变量的操作,实际上是对某个地址的存储单元进行操 作。这种直接按变量的地址存取变量值的方式称为“直接存取”方 式 指针变量:用来存放内存地址的变量称为指针变量。 设:指针变量p中存放了变量a的地址。则有如下图所示: 1010 1220 10101011 要访问a所代表的存储单元,可以 先找变量p的地址1220,从中取出a的1010 3 地址,然后再去访问以1010为首地址的1012 4 存储单元。 1014 这种通过指针变量先得到某变量地址, 然后再存取该变量值的方式称为“间接122010}p 存取“方式。 通常称变量p指向了变量a,所以 称p是指针变量(p中存放了a的地址)。我们将变量的“地址” 称为该变量的“指钍”。“指针”和“地址”是同一个意义
2、指针与指针变量 程序中对变量的操作,实际上是对某个地址的存储单元进行操 作。这种直接按变量的地址存取变量值的方式称为“直接存取”方 式。 指针变量:用来存放内存地址的变量称为指针变量。 设:指针变量p中存放了变量a的地址。则有如下图所示: 要访问 a 所代表的存储单元,可以 先找变量p 的地址1220,从中取出a 的 地址,然后再去访问以1010为首地址的 存储单元。 这种通过指针变量先得到某变量地址, 然后再存取该变量值的方式称为“间接 存取“方式。 通常称变量p 指向了变量a ,所以 称p 是指针变量(p 中存放了a 的地址)。我们将变量的“地址” 称为该变量的“指针”。“指针”和“地址”是同一个意义。 3 a 4 1010 1012 1014 1220 p 1010 1010 1010 1011 a p 1220
、指针的类型与指针的定义 指针变量的定义: 形式: 类型名“指针变量名1,指针变量名2, 如:int*pi,*p; 说明:是说明符,用来说明该变量是指针变量; int是类型名,用来说明p和p是指向整型变量的指针 指针的类型:指针所指向的变量的类型。 int也称为pi、pj的“基类型” 如:intp; /p中只能存放整型变量的地址* double*pd;/pd中只能存放 double类型变量的地址*/ float *pf /2pf中只能存放oat类型变量的地址* char *st /2s中只能存放字符类型变量的地址 又如:intp,i,k; 3 & /将i的地址赋给指针变量 p /将所指地址中的内容赋给k*/ 注:intP;此时表示指针类型,是指针类型说明符,在非定义 中的*p为所指变量中存放的内容,在此例中代表存储单元i
二、指针的类型与指针的定义 指针变量的定义: 形式: 类型名 *指针变量名1,指针变量名2,…; 如: int *pi,*pj; 说明:* 是说明符,用来说明该变量是指针变量; int 是类型名,用来说明pi 和 pj 是指向整型变量的指针。 指针的类型:指针所指向的变量的类型。 int 也称为 pi 、pj 的“基类型” 如:int *p; /*p中只能存放整型变量的地址*/ double *pd; /*pd中只能存放double类型变量的地址*/ float *pf; /*pf中只能存放float 类型变量的地址*/ char *st; /*st中只能存放字符类型变量的地址*/ 又如:int *p,i,k; i=3; p=&i; /*将i 的地址赋给指针变量*/ k=*p; /*将所指地址中的内容赋给k*/ 注:int *P ; 此时*P表示指针类型,* 是指针类型说明符,在非定义 中的 *p 为所指变量中存放的内容,在此例中代表存储单元i
指针变量的引用 指针运算:&运算符为取地址,如:&x的值为x的地址。 ☆运算符为指向,如:*P表示P指向的变量。 如:inta,P printf(“%0”,p);/以八进制输出指针P的地址* p=&a; /*P指向a* scant(“%d”p);/向P指向的变量输入一个整数值* printf(9d”,P);/输出P所指向的变量的值* P=5 /将5赋给P所指向的变量 如: mainO {int“p1,*p2,i1,i2 p i1(*p) scanf(%d, %d", &il, &12); &il 20 pl=&il; p2=&i2 printf(%d,%dⅦn”,p1,*p2); D2=p1 p2=p1; 12(*p) printf(“9d,%dn”,pl,p2);&ll 50
三、指针变量的引用 指针运算: & 运算符为取地址,如:&x 的值为x 的地址。 * 运算符为指向,如:*P表示P指向的变量。 如: int a,*P; printf(“%o”,p); /*以八进制输出指针P的地址*/ p=&a; /*P指向a*/ scanf(“%d”,p); /*向P指向的变量输入一个整数值*/ printf(“%d”,*P); /*输出P所指向的变量的值*/ *P=5; /*将5赋给P所指向的变量*/ 如:main() { int *p1,*p2,i1,i2; scanf(“%d,%d”,&i1,&i2); p1=&i1;p2=&i2; printf(“%d,%d\n”,*p1,*p2); p2=p1; printf(“%d,%d\n”,*p1,*p2); } &i1 20 &i1 50 p1 p2 i1(*p) i2(*p) P2=p1
四、指向指针的指针 指向指针型数据的指钍变量称指向指针的指钍 定义:类型标识符指针变量名 如:int*水p,*s,k=20; s=&k; &s P代表S,S代表K,因此*P代表K p k &k 20
四、指向指针的指针 指向指针型数据的指针变量称指向指针的指针 定义:类型标识符 **指针变量名 如: int **p,*s,k=20; s=&k; p=&s; *P 代表 S, *S代表K,因此**P代表K。 &s &k p s k 20
小结: 1、地址与指针 内存编号指针与地址同意。 2、指针类型与定义 指向何种类型变量,则定义为该基类型。 指针变量用于存放变量的地址,从而指向这个变量。 3、指针变量引用 当指针变量指向某变量时,则可通过它间接访问该变量。 4、指向指针的指针 个指针变量中存放另一个指针变量的地址,而被指向的指 针变量则又存放一个变量的地址
小结: 1、地址与指针 内存编号,指针与地址同意。 2、指针类型与定义 指向何种类型变量,则定义为该基类型。 指针变量用于存放变量的地址,从而指向这个变量。 3、指针变量引用 当指针变量指向某变量时,则可通过它间接访问该变量。 4、指向指针的指针 一个指针变量中存放另一个指针变量的地址,而被指向的指 针变量则又存放一个变量的地址