厦门理工第07章指针(简易).pptVIP

  • 2
  • 0
  • 约2.05万字
  • 约 84页
  • 2019-10-10 发布于湖北
  • 举报
*   指向指针变量的指针变量又简称为指向指针的指针变量。   指向指针的指针变量定义的形式为:   类型名 **指针变量名;   此处,指针变量名是“指向指针的指针变量”的变量名,类型名是该指针变量经过二级间址后所存取变量的数据类型。由于运算符“*”的结合性是“从右到左”,因此“**指针变量名”等价于“*(*指针变量名)”,表示该指针变量的值存放的是另一个指针变量的地址,要经过两次间接存取后才能存取到变量的值。例如语句:   char **p;   定义p为指向指针的指针变量,它要经过两次间接存取后才能存取到变量的值,该变量的数据类型为char。 7.5 指向指针的指针 * 通过指针变量存取变量的值 地址 值 指针变量 变量 (a)一级间址 地址1 地址2 指针变量1 指针变量2 (b) 二级间址 值 变量 地址n 值 变量 指针变量n … 指针变量 指针变量2 地址1 地址2 (c) n级间址 7. 5 指向指针的指针 *  1.指向一个指针变量,间接存取变量的值  可以把一个指针变量的地址赋给指向指针的指针变量,然后通过二级间址方法存取变量的值。 7.5.3 指向指针的指针变量应用 * 例7-10 通过二级间址方法存取变量的值。 main() { double d=123.456, *p, **pp; pp=p; p=d; printf(d=%8.3f, , **pp); **pp+=543.21; printf(d=%8.3f\n, d); } 运行结果为 d=123.456, d=666.666 *   上述指针变量pp指向指针变量p,而指针变量p又指向双精度实型变量d,如图7-17所示,图中假设指针变量p的地址是1500,变量d的地址是3500。此时*pp表示指针变量p的值(即变量d的地址),因此表达式**pp与变量d等价。 1500 指向指针的指针变量pp 3500 指针变量p 123.45 变量d 1500(地址) 3500(地址) 图 7-17 指向指针指针指向指针变量 *   2.指向指针数组,存取指针数组元素所指内容    可以把一个指针数组的首地址赋给指向指针的指针变量,例如:   例7-11 有三个等级分,由键盘输入1,屏幕显示“pass”,输入2显示“good”,输入3显示“excellent”。 main() { int grade; char *ps[ ]={pass,good,excellent},**pp; pp=ps; printf(请输入等级分(1~3):); scanf(%d,grade); printf(%s\n,*(pp+grade-1)); } 运行结果: 请输入等级(1~3):2↙ good *   上述程序中pp指向数组ps的第一个元素ps[0],pp+1则指向ps的下一个元素ps[1],pp+2指向ps[2],如图7-18所示。因此*pp就是字符串”pass”的首地址,*(pp+1)则是字符串”good”的首地址,*(pp+2)是字符串”excellent”的首地址。 p a s s \0 ps[0] g 0 0 d \0 ps[1] ps[2] pp pp+1 pp+2 图 7-18 指向指针的指针指向指针数组 e x c e l l e n t \n *   一个结构体类型变量在内存中占有一段连续存储单元,这段内存单元的首地址,就是该结构体变量的指针。 可以用一个指针变量指向一个结构体变量,或指向结构体数组中的元素。这样的指针变量称为结构体的指针变量。 7.6 指针与结构体 * struct stu *pstu; (*pstu).num 或者: pstu-num 7.6指针与结构体 一个指针当用来指向一个结构时, 称之为结构指针变量。 结构指针变量中的值是所指向的结构变量的首地址。 结构指针变量声明的一般形式为: struct 结构名 *结构指针变量名 通过结构指针可以访问该结构变量的成员,一般形式为: (*结构指针变量).成员名 或者 结构指针变量-成员名 #includestdio.h struct student { int num; char *name; char sex; float score; }stu={1,“张三,F,55},*pstu; void main() { pstu=stu; printf(学号:%d 姓名:%s\n,stu.num,); printf

文档评论(0)

1亿VIP精品文档

相关文档