第九章 指针
9.1 指针变量的定义和初始化
1.定义
类型关键字 *指针变量名
-int * pa
语句解读:*(间接寻址运算符:单目运算符,右结合性,2级)pa 是一个指针变量,指向一个整形变量
-int * p[4]
语句解读:[]优先级高于*,p是由4个指向整形变量的指针组成的数组
-int (*p)[4]
语句解读:(*p)=数组名,此时p指向一个列是4的二维数组
2.初始化
指针未初始化会给系统带来潜在威胁
-若没有具体指向
int *p=NULL(stdio.h中定义值为零的宏)
-若有具体指向
int a,b;char c;
int pa=&a;int pb=&b; char pc=&c;
【注意】指针变量只能指向同一基类型的变量
pc=&a;[×]
9.2 指针与内存
1.
int a=0;
int pa=&a;
*pa=9;
printf("a is %d,&a is %p,pa is %p,*pa is %d",a,&a,pa,*pa);
输出结果:a is 9,&a is 0023FF74,pa is 0023FF74,*pa is 9
2.
int a=0;
int pa;
printf("a is %d,&a is %p,pa is %p");
输出结果:a is 0,&a is 0023FF74,pa is 0023FF78;
pa未初始化,所以&a和pa的值不等
9.3 模拟按引用调用
按值调用:形参不能更改实参 返回途径:return 一个变量
为了解决按置调用的上述两个问题,引用指针做函数参数
模拟按引用调:形参和实参都指向同一块地方,可由形参更改实参;可以不用return做返回途径
search例9.7
9.4 函数指针
-函数指针
int (*compare)(int a,int b)-------函数指针:同数组名是数组首地址,函数名是函数入口地址
函数指针指向函数入口地址
语句解释:compare是一个指针变量,指向一个有两个参数,返回值是整型的函数
search例9.9
-指针函数
int *compare(int a,int b)
语句解释:有两个整型参数,返回值是整型指针的函数