好文档 - 专业文书写作范文服务资料分享网站

7 第6章 数组、指针与字符串(二)

天下 分享 时间: 加入收藏 我要投稿 点赞

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 using namespace std;

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 using namespace std;

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 using namespace std;

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 using namespace std;

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

cout<<\<

cout<<\<

cout<<\<

8ulss5up8i6ksx797jw59jajr88l5800wu5
领取福利

微信扫码领取福利

微信扫码分享