北京理工大学《C语言程序设计4》课件-第九章 指针.pptVIP

  • 8
  • 0
  • 约1.13万字
  • 约 42页
  • 2022-12-07 发布于北京
  • 举报

北京理工大学《C语言程序设计4》课件-第九章 指针.ppt

共 42 页 第 * 页 概念复习 假设: int a[100]; 数组名:数组的标识 a 数组元素的地址:数组中1个具体元素的地址(a[k]) 数组首地址(数组起始地址):数组中第 1 个元素(0号元素)的地址(a[0]或用数组的名称 a 表示)。 C语言规定:数组名就是数组的首地址常量。 那么下面关系表达式成立: a == a[0] §9-3 数组与指针 一、通过指针引用一维数组中的元素 共 42 页 第 * 页 【例题】分析程序。 main( ) { int a[ ] = { 1, 2, 3, 4, 5 }; int *p; p=a; /* 指针p为数组的首地址 */ printf (%d, *p ); printf ( %d\n, *(++p) ); printf (%d, *++p ); printf ( %d\n, *(p--) ); p += 3; printf(%d %d\n, *p, *(a+3) ); } §9-3 数组与指针 指针初始化 第一个输出 第二个输出 第三个输出 第四个输出 第五个输出 p=a 取p的内容 p先加1再取内容 p先加1再取内容 取内容p再减1 取p的内容 p+=3 p p p p p p 1 2 指针初始化 3 4 5 a a+1 a+2 a+3 a+4 a[0] a[1] a[2] a[3] a[4] 语句执行 指针p指向 地址 数组 共 42 页 第 * 页 int a[4]={6,7,8,9}, k , *p; 直接引用数组元素地址 p=a[1]; k=*p+7; (k=a[1]+7;) 通过指针运算得到数组元素地址 p=a; k=*(p+1)+7; (k=a[1]+7;) 用数组下标引用数组元素: k=a[1]+7; §9-3 数组与指针 共 42 页 第 * 页 二、指针的基本运算 404 405 406 407 408 409 410 411 412 413 a[0] a[1] a[2] a[3] a[4] 30 20 10 40 50 p1 p2 指针加减运算要点: ① 只有当指针变量指向数组时指针的加减 运算才有意义。 ② 指针变量可加减一个整型表达式。如: p1++、p2=p2+3、p2--、p2-2。 ③ 指针的加减运算是以基类型为单位(即 sizeof(类型))的。 ④ 两个指针变量不能作加法运算,只有当 两个指针变量指向同一数组时,进行指针变量相减才有实际意义。如:p2-p1, 物理意义是:指针p2 和p1 所指对象之间的元素的数量。 §9-3 数组与指针 共 42 页 第 * 页 404 405 406 407 408 409 410 411 412 413 a[0] a[1] a[2] a[3] a[4] 30 20 10 40 50 p1 p2 指针关系运算要点: ① 指向同一数组的两个指针可以进行关系运算,表明它们所指向元素的相互位置关系 。 如:p2 p1、p2 == p1。 ② 指针与一个整型数据进行比较是没有意义的 。 ③ 不同类型指针变量之间比较是非法的。 ④ NULL可以与任何类型指针进行==、!= 的关系运算,用于判断指针是否为空指针 。 §9-3 数组与指针 共 42 页 第 * 页 【例题】编写函数,求字符串的长度。 strlen ( char * s ) /* 求串s的长度 */ { char *p = s; while ( *p ) p++; /* 找到串结束标记\0 */ return ( p - s ); /* 两个指针相减法,求出串长 */ } a b c d e f \0 p p =s+6 串长=6 §9-3 数组与指针 s 共 42 页 第 * 页 【例题】编写函数,实现串反向。 revstr ( char * s ) /* 将串s反向 */ { char *p=s, c; while ( *p ) p++; /* 找到串结束标记\0 */ p--; /* 指针p指向串中的最后一个字符 */ while ( sp ) /* 当串前面的指针s串后面的指针p时 */ { c = *s; /* 交换两个指针所指向的字符 */ *s++ = *p; /* 指针s向后(+1)移动,先赋值再+1 */ *p-- = c; /* 指针p向前(-1)移动,

文档评论(0)

1亿VIP精品文档

相关文档