第十二章指针
第十二章 指针
12.1指针与指针变量 如:inta=1,b=2; 2000 变量a float x=34,y=4.5;2012变量b double m3. 124 2004 3.4 变量x char chI='a‘,ch2=b’; 2008 4.5 变量y 个地址唯一指向一个内存变 量,我们称这个地址为变量的 3.124 变量m 2012 指针。如果将变量的地址保存2020 变量chl 在内存的特定区域,用变量来 2021 变量ch2 存放这些地址,这样的变量就 是指针变量,通过指针对所指 向变量的访问,也就是一种对 变量的“间接访问”。 第十二章指针
第十二章 指针 12.1 指针与指针变量 如:int a=1, b=2; float x=3.4, y = 4.5 ; double m=3.124; char ch1='a‘, ch2='b'; 1 2 4.5 3.4 3.124 a b 2000 2002 2004 2008 2012 2020 2021 变量a 变量b 变量x 变量y 变量m 变量ch1 变量ch2 一个地址唯一指向一个内存变 量,我们称这个地址为变量的 指针。如果将变量的地址保存 在内存的特定区域,用变量来 存放这些地址,这样的变量就 是指针变量,通过指针对所指 向变量的访问,也就是一种对 变量的“间接访问
121指针与指针变量 设一组指针变量pa、pb、px、py、pm、pchl、pch2, 分别指向上述的变量a、b、x、y、m、chl、ch2,指针变 量也同样被存放在内存,二者的关系如图: 10002000pa 2001变量a 10022002pb 2002 2 变量b 0042004px 10062008py 2004 3.4 变量x 10082012p 10102020pch 2008 4.5 变量y 1012202lpch2 1014 1016 3.124 变量m 2012 2020 变量ch 021 变量ch2 计二章′指针
第十二章 指针 1 2 4.5 3.4 3.124 a b 2000 2002 2004 2008 2012 2020 2021 变量a 变量b 变量x 变量y 变量m 变量ch1 变量ch2 1012 pa 1004 2012 2000 2002 2004 2008 2020 2021 1000 1002 1006 1008 1010 1014 1016 pb px py pm pch1 pch2 设一组指针变量pa、pb、px、py、pm、pch1、pch2, 分别指向上述的变量a、b、x、y、m、ch1、ch2,指针变 量也同样被存放在内存,二者的关系如图: 12.1 指针与指针变量
122指针变量的定义与引用 、指针变量的定义 ■指针定义的格式:类型说明符*指针名; ■*表示这是一个指针变量, 变量名即为定义的指针变量名; 类型说明符表示本指针变量所指向的变量的数 据类型,也就是说一个指针变量只能指向同 类型的变量 如:int*p1; 表示p是一个指针变量,它的值是某个整型 变量的地址。或者说p1指向一个整型变量。至 于p1究竟指向哪一个整型变量,应由向p1赋予 的地址来决定。 第十二章指针
第十二章 指针 ◼ 指针定义的格式: 类型说明符 *指针名; ◼ *表示这是一个指针变量, 变量名即为定义的指针变量名; 类型说明符表示本指针变量所指向的变量的数 据类型,也就是说一个指针变量只能指向同一 类型的变量。 如:int *p1; 表示p1是一个指针变量,它的值是某个整型 变量的地址。或者说p1指向一个整型变量。至 于p1究竟指向哪一个整型变量,应由向p1赋予 的地址来决定。 12.2 指针变量的定义与引用 一、指针变量的定义
122指针变量的定义与引用 二、指针变量的赋值 赋值形式:&变量名; &:取地址符 8a表示变量a的地址,&b表示变量b的地址。变 量本身必须预先说明。 ■指针变量同普通变量一样,使用之前不仅要定 义说明,而且必须赋予具体的值。未经赋值的 指针变量不能使用,否则将造成系统混乱,甚 至死机。 指针变量的赋值只能赋予地址,决不能赋予任 何其它数据,否则将引起错误。 第十二章指针
第十二章 指针 ◼ 赋值形式: & 变量名; &:取地址符 &a表示变量a的地址,&b表示变量b的地址。变 量本身必须预先说明。 ◼ 指针变量同普通变量一样,使用之前不仅要定 义说明,而且必须赋予具体的值。未经赋值的 指针变量不能使用,否则将造成系统混乱,甚 至死机。 ◼ 指针变量的赋值只能赋予地址,决不能赋予任 何其它数据,否则将引起错误。 12.2 指针变量的定义与引用 二、指针变量的赋值
122指针变量的定义与引用 二、指针变量的赋值 设有指向整型变量的指针变量p,如要把整型变量a的地 址赋予p可以有以下两种方式: 1)指针变量初始化的方法 int a: int*p=&a 2)赋值语句的方法 int int“p; &a; 不允许把一个数赋予指针变量,下面的赋值是错误的: int"p p=1000; ■被赋值的指针变量前不能再加“”说明符,如写为 p=&a也是错误的。 第十二章指针
第十二章 指针 设有指向整型变量的指针变量p,如要把整型变量a 的地 址赋予p可以有以下两种方式: 1)指针变量初始化的方法 int a; int *p=&a; 2)赋值语句的方法 int a; int *p; p=&a; ◼ 不允许把一个数赋予指针变量,下面的赋值是错误的: int *p; p=1000; ◼ 被赋值的指针变量前不能再加“*”说明符,如写为 *p=&a 也是错误的。 12.2 指针变量的定义与引用 二、指针变量的赋值
122指针变量的定义与引用 二、指针变量的运算 ■指针变量只能进行赋值运算和部分算术运算及 关系运算。 (1)取地址运算符&:是单目运算符,其结合性为 自右至左,其功能是取变量的地址。 (2)取内容运算符*:是单目运算符,其结合性为自 右至左,用来表示指针变量所指的变量。在“共” 运算符之后跟的变量必须是指针变量。 ˉ注意:在指针变量说明中,“*”是类型说明符, 表示其后的变量是指针类型。而表达式中出现 的“☆”则是一个运算符用以表示指针变量所指 的变量。 第十二章指针
第十二章 指针 ◼ 指针变量只能进行赋值运算和部分算术运算及 关系运算。 (1)取地址运算符&:是单目运算符,其结合性为 自右至左,其功能是取变量的地址。 (2)取内容运算符*:是单目运算符,其结合性为自 右至左,用来表示指针变量所指的变量。在“*” 运算符之后跟的变量必须是指针变量。 ◼ 注意:在指针变量说明中,“*”是类型说明符, 表示其后的变量是指针类型。而表达式中出现 的“*”则是一个运算符用以表示指针变量所指 的变量。 12.2 指针变量的定义与引用 二、指针变量的运算
122指针变量的定义与引用 二、指针变量的运算 「例121指针变量程序举例。 maino i int*pl,*p2, il, 12; scanf(“%d,%d”,&il,&i2); l=&il;p2=&i2; printi(%d,%dⅦn”,*pl,*p2); p2=pl; printf(“d,%dm”,*p1,*p2); 若输入: 则输出: 3,5 3,3 第十二章指针
第十二章 指针 [例12.1]指针变量程序举例。 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); } 若输入: 3,5 则输出: 3,5 3,3 12.2 指针变量的定义与引用 二、指针变量的运算
122指针变量的定义与引用 二、指针变量的运算 「例122从键盘输入两个整数,按由大到小的顺 序输出。 main int*p1,“p2,a,b, scanf(ood, %d ", &a,&b); pl=&a; 2=b f(*p1<*p2) {t*p1;*p1=*p2;*p2=t;} printf(ood, %dn",a, b); 第十二章指针
第十二章 指针 [例12.2] 从键盘输入两个整数,按由大到小的顺 序输出。 main( ) { int *p1, *p2,a,b,t; scanf("%d ,%d ",&a,&b) ; p1=&a; p2=&b; if(*p1<*p2) { t=*p1;*p1=*p2;*p2=t;} printf("%d,%d\n",a,b) ; } 12.2 指针变量的定义与引用 二、指针变量的运算
123指针变量做函数的参数 ■使用指针类型做函数的参数,实际向函 数传递的是变量的地址。由于函数中获 得了所传递变量的地址,在该地址空间 的数据当函数调用结束后被物理地保留 下来。因此,如果希望函数间传递的是 地址,实参用变量的地址或指针变量, 形参用指针变量。 第十二章指针
第十二章 指针 ◼ 使用指针类型做函数的参数,实际向函 数传递的是变量的地址。由于函数中获 得了所传递变量的地址,在该地址空间 的数据当函数调用结束后被物理地保留 下来。因此,如果希望函数间传递的是 地址,实参用变量的地址或指针变量, 形参用指针变量。 12.3 指针变量做函数的参数