- 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)