C语言指针解读课件.ppt
《C语言指针解读课件.ppt》由会员分享,可在线阅读,更多相关《C语言指针解读课件.ppt(40页珍藏版)》请在三一办公上搜索。
1、2022/11/30,1,C程序设计中使用指针可以: 使程序简洁、紧凑、高效 有效地表示复杂的数据结构 动态分配内存,第6章 指针,2022/11/30,2,6.1 指针和变量,在计算机中,内存中的每一个字节的内存单元都有一个编号,这个编号就是“地址”,对于有多个字节的变量,第一个字节的地址就是该变量的地址。 如果有:short int x=5;设系统为x分配的地址为2000,则: x 2000 5 p 2002 2000,注意:区分变量的地址和变量的值,2022/11/30,3,变量的指针:就是变量的地址。指针变量:存放变量地址的变量。定义指针变量的一般形式为:基类型 * 变量名; 其中基类
2、型用来指定该指针变量所指向的变量的类型。 例如: float *p; /*定义p为指向实型变量的指针*/ int *q; /*定义q为指向整形变量的指针*/ char *s; /*定义s为指向字符型变量的指针*/,2022/11/30,4,char x=A;char *p; p=,注意:指针变量只能存放具有基本类型的变量的地址。,2022/11/30,5,与指针相关的运算符: &:取地址运算符,其作用是求变量 的地址。 取地址运算符具有右结合性, 其优先级和自加运算符相同 2。 *:指针运算符,或称“间接访问”运 算符。 指针运算符也具有右结合性,优先级为2。,2022/11/30,6,【例1
3、】 main() int a=3; int *p; p= ,2022/11/30,7,【例2】用指针的方法交换两个数 main() int x=102,y=12,t; int *p1,*p2;p1= ,2022/11/30,8,例 main( ) int i=10; int *p; *p=i; printf(%d,*p); ,例 main( ) int i=10,k; int *p; p= ,指针变量必须先赋值,再使用,错误,正确,2022/11/30,9,6.2 指针与数组,6.2.1 指向数组的指针,1. 一维数组的指针,例如: int a10,*p; p=*(p+i) = pi=ai,2
4、022/11/30,10,a,【例3】用指针法输出数组元素。main( ) int a10, i, *p; for (i=0; i10; i+) scanf(%d, a+i); for (i=0; i10; i+) printf(%4d ,*(a+i); printf(n); for (p=a,i=0; i10; i+) printf(%4d ,*(p+i); printf(n);,1. 一维数组的指针,12345677910,1 2 3 4 5 6 7 7 9 10,1 2 3 4 5 6 7 7 9 10,2022/11/30,11,【例3】用指针法输出数组元素。main( ) int a
5、10, i, *p; for (p=a; pa+10; p+) scanf(%d,p); for (p=a; pa+10; p+) printf(%d ,*p); printf(n); ,1. 一维数组的指针,8,10,2022/11/30,12,数组名和指向数组的指针变量的区别:指针变量p是变量可以赋值,数组名a是地址常量不能赋值。,用指针变量引用数组元素,必须关注其当前值。例如: p = p + 3*(p-1)等价于a2,a,12345677910,2022/11/30,13,【例4】用指针法求字符串的长度 main( ) char s30,*p; int n=0; gets(s); p=
6、s; while(*p!=0) p+; n+; printf(“%d”,n); ,s,p,2022/11/30,14, 二维数组的地址 例如:int a34; 二维数组名a是数组的首地址。 二维数组a包含三个行元素:a0、a1、a2 。,三个行元素的地址分别是:a、a+1、a+2。而a0、a1、a2也是地址量,是一维数组名,即*(a+0)、*(a+1)、*(a+2)是一维数组首个元素地址。,2. 二维数组的指针,a+1a+2,2022/11/30,15, 二维数组元素的地址 a0、a1、a2是一维数组名,所以ai+j是数组元素的地址。,数组元素aij的地址可以表示为下列形式: &aij、ai+
7、j 、*(a+i)+j,a0数组a1数组a2数组,2. 二维数组的指针, 数组元素可用下列形式表示: aij、*(ai+j)、*(*(a+i)+j),2022/11/30,16,(4)指向一维数组的指针变量 指向一维数组指针变量的定义形式: 数据类型标识符 (*变量名)元素个数,2. 二维数组的指针,“*”表示其后的变量名为指针类型,元素个数表示目标变量是一维数组,并说明一维数组元素的个数。由于“*”比“ ”的运算级别低,“*变量名”作为一个说明部分,两边必须加括号。 “数据类型标识符”是定义一维数组元素的类型。,2022/11/30,17,【例5】用指向一维数组的指针变量输出数组元素。 ma
8、in( ) int a34=0,1,2,3,10,11,12,13,20,21,22,23; int (*lp)4, i, j; for (lp=a, i=0; i3; i+) for (j=0; j4; j+) printf(%4d,*(*(lp+i)+j); printf(n); ,2022/11/30,18,【例5】用指向一维数组的指针变量输出数组元素。 main( ) int a 4=0,1,2,3,10,11,12,13,20,21,22,23; int (*lp)4, j; for (lp=a; lpa+3; lp+) for (j=0; j4; j+) printf(%4d,*(
9、*lp+j); printf(n); ,2022/11/30,19,【例6】通过初始化使指针指向一个字符串。 main( ) char str1 =Good morning!; char *str2=Good night!; printf(%sn,str1); printf(%sn,str2); ,6.2.2 指向字符串的指针变量,1. 指向字符串的指针变量的定义及初始化,字符串的两种表示方式: 字符数组表示方式,字符串存放在一维数组中,引用时用数组名。 字符指针变量表示方式,字符指针变量存放字符串的首地址,引用时用指针变量名。,Good morning!,Good night!,2022/1
10、1/30,20,【例7】通过赋值运算使字符指针变量指向一个字符串。 #include main( ) char c70,*str; strcpy(c,How are you ?); str=Fine,thanks.; printf(%sn%sn,c,str); ,2. 字符串的赋值运算,将一个字符串赋给一个字符数组只能使用strcpy函数 将字符串常量的首地址赋给指针变量,可使用赋值运算符“=”,How are you ?,Fine,thanks.,2022/11/30,21,【例8】利用指针变量输入输出字符串。 #include main( ) char c70,*str; str=c; g
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 指针 解读 课件
链接地址:https://www.31ppt.com/p-1480402.html