第7章——函数

本文详细介绍了函数的概念、定义、调用、参数传递、数组与函数交互、指针和const使用、二维数组处理、C风格字符串操作、结构与函数、字符串与函数指针交互等核心知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

l         函数的基本知识

创建自己的函数时,必须自行处理3个方面

n         定义

n         提供原型(其它的书称为函数声明)

n         调用

l         函数参数和按值传递

eg:double cube(double x),函数被调用时,它将创建一个新的名为x的double变量,并将实参的拷贝传递给它。

l         函数和数组

在函数中传递数组方法:

eg:int sum_arr(int arr[],int n)

int sum_arr(int *arr,int n)

上述两个语句是等效的。传递常规变量时是,函数将使用该变量的拷贝;但传递数组时,函数将使用原来的数组。

 

在调用以数组作为参数的函数时应显示地传递数组长度,例如上例中的‘n’值。且数组首地址,与数组元素个数要分开传递。

 

在C++中还有另一种提供数组信息的方法:指定元素区间。假设有这样的声明

double elbuod[20];

则指针elbuod和elbuod+20定义了该区间。

eg:如在main函数中有如下

int cookies[]={1,2,4,8,16,32,64,128}

sum=sum_arr(cookies,cookies+3)

则会有以下原型定义

int sum_arr(const int* begin,const int* end)

{

       const int *pt;

       int total=0;

       for(pt=begin;pt!=end;pt++)

              total=total+*pt;

       return total;

}

l         指针和const

有两种不同的方式将const关键字用于指针。第一种方法是让指针指向一个常量对象,这样可以防止使用该指针来修改指向的值;第二种方法是指针本身声明为常量,这样可以改变指针指向的位置

 

l         函数和二维数组

int sum(int ar2[][4],int n)

int sum(int (*ar2)[4],int n)

即如果是二维数组,则第二个参数是固定传递的。

l         函数和C-风格字符串

假设要将字符串作为参数传递给函数,则表示字符串的方式有3种

n         char数组

n         用引号括起的字符串常量(字符串字面值)

n         被设置为字符串的地址char指针

对应的实例

n         char ghost[15]=”galloping”;int n1=strlen(ghost);

n         int n2=strlen(“gamboling”);

n         char *str=”galumphing”;int n3=strlen(str);

 

C-风格字符串与常规char数组之间的一个重要区别是,字符串有内置的结束字符。即如果要判断字符是否为空,可用while(*str){…str++;…}

 

如果要返回一个字符串,则就返回的是字符串的指针。如下格式

eg:char *builestr(parameter)

{

       char *pstr=new char [n+1];

       …

       return pstr;

}

l         函数和结构

可以将一个结构赋给另一个结构。如果函数要将结构体作为参数传递,有三种方法:

n         按值传递

n         传递地址结构

n         按引用传递

按值传递时,如果结构非常大,复制结构会增加内存要求,降低系统运行速度。其中前两种方法的传递方式与普通变量传递方式是一样的。

l         函数和string对象

可以将sring对象按照按值传递的形式在函数中传递参数。

l         函数指针

获取函数的地址很简单,只要使用函数名(后面不跟参数)即可。

声明与赋值:

eg:double pam(int);

       double (*pf)(int);

pf=pam;

使用指针调用函数:接着上面的例程double x=pam(4);

       double y=(*pf)(5);

       double z=pf(6);

 

一个调用例程:

在main()中有如下调用:

estimate(code,betsy);

函数定义:

estimate(int lines,double (*pf)(int))

{

       using namespace std;

       cout<<(*pf)(lines)<<”hours\n”

}

double betsy(int lns)

{

       return 0.05*lns;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值