int main() {
cout << \ << endl; for(int i = 0; i < 3; i++) { float x, f; int n; cin >> x;
splitFloat(x, &n, &f); //变量地址作为实参
cout << \ << n << \ << f << endl; }
return 0;
}
运行结果:
例6-10-2 指向常量的指针做形参 //例6_10_2 指向常量的指针做形参.cpp #include
const int N = 6;
void print(const int *p, int n);
int main() {
int array[N];
for ( int i = 0; i < N; i++) cin >> array[i]; print(array, N);
return 0; }
运行结果:
6.2.9 指针类型的函数
若函数的返回值是指针,该函数就是指针类型的函数。 指针函数的定义形式 存储类型 数据类型 *函数名() {//函数体语句 } 注意
● 不要将非静态局部地址用作函数的返回值
■ 错误的例子:在子函数中定义局部变呈后将其地址返回给主函数,就是非法地址。 ● 返回的指针要确保在主调函数中是有效、合法的地址 ■ 正确的例子:
主函数中定义的数组,在子函数中对该数组元素进行某种操作后,返回其中一个元素的地址,这就是合法有效的地址。
● 返回的指针要确保在主调函数中是有效、合法的地址 ■ 正确的例子:
在子函数中通过动态内存分配new操作取得的内存地址返回给主函数是合法有效的,但是内存分配和释放不在同—级别,要注意不能忘记释放,避免内存泄漏。 错误的例子
int main(){
int* function();
int* ptr=function();
*ptr=5;//危险的访问!
return 0; }
int* function(){
int local=0;//非静态局部变量作用域和寿命都公限于本函数体内 return &local;
}//函数运行结束时,变量local被释放
正确的例子1
//例6_10_3 6.2.9 指针类型函数正确例子1.cpp #include
int main(){
int array[10];//主函数中定义的数组 int* search(int* a,int num); for(int i=0;i<10;i++) cin>>array[i];
int* zeroptr=search(array,10);//将主函数中数组的首地址传给子函数
return 0; }
int* search(int* a,int num){//指针a指向主函数中定义的数组
for(int i=0;i return &a[i];//返回的地址指向的元素是在主函数中定义的 }//函数运行结束时,a[i]的地址仍有效 正确的例子2 //例6_10_4 6.2.9 指针类型函数正确例子2.cpp #include int main(){ int* newintvar(); int* intptr=newintvar(); *intptr=5;//访问的是合法有效的地址 delete intptr;//如果忘记在这里释放,会造成内存泄漏 return 0; } int* newintvar(){ int* p=new int(); return p;//返回的地址指向的是动态分配的空间 }//函数结束运行时,p中的地址仍有效 6.2.10 指向函数的指针 函数指针的定义 ● 定义形式 存储类型 数据类型 (*函数指针名)(); ● 含义 函数指针指向的是程序代码存储区 函数指针的典型用途一一实现函数回调 ● 通过函数指针调用的函数 ■ 例如将函数的指针作为参数传递给一个函数,使得在处理相似事件的时候可以灵活的使 用不同的方法。 ● 调用者不关心谁是被调用者 ■ 需知道存在一个具有特定原型和限制条件的被调用函数。 函数指针举例 ● 编写一个计算函数compute,对两个整数进行各种计算。有一个形参为指向具体算法函 数的指针,根据不同的实参函数,用不同的算法进行计算。 ● 编写三个函数:求两个整数的最大值、最小值、和。分别用这三个函数作为实参,测试 compute函数。 例6-11-0 函数指针举例 //例6_11_0 函数指针举例.cpp(P211) #include int compute(int a,int b,int(*func)(int,int)) {return func(a,b);} int max(int a,int b)//求最大值 {return((a>b)?a:b);} int min(int a,int b)//求最小值 {return((a int sum(int a,int b)//求和 {return a+b;} int main(){ int a,b,res; } 运行结果: cout<<\请输入整数a:\;cin>>a; cout<<\请输入整数b:\;cin>>b; res = compute(a,b,&max);