第七章 函数——C++的编程模块

C++同样不能返回数组,但可以返回其他任何类型,虽然不能直接返回数组但是可以将数组作为结构或对象组成部分来返回。

通常函数通过将返回值复制到指定的CPU寄存器或内存单元中来将其返回。

函数原型将返回值类型告诉调用程序,而函数定义命令被调用函数应返回什么类型的数据。

在C++中括号为空与在括号中使用关键字void是等效的——意味着函数没有参数 不指定参数列表时应使用省略号 void sky(...);

仅当有意义时,原型化才会导致类型转换。例如,原型不会将整数转换为结构或指针。

函数参数和按值传递

在函数中修改形参不会影响调用程序中的数据

在C++中 当且仅当用于函数头和函数原型中,int *arr和int arr[]的含义是相同的。它们都意味着arr是一个int 指针。

如下恒等式

arr[i]==*(ar+i);

&arr[i]==ar+i;

传递数组时,函数将使用原来的数组。实际上,这种quiet并不违反C++按值传递的方法,函数仍传递了一个值,这个值被赋给一个新变量,但这个值是一个地址,而不是数组的内容。

不要试图使用方括号表示法来传递数组长度。

!cin 详情可见https://segmentfault.com/q/1010000007577047以及https://blog.csdn.net/maoliran/article/details/51725142

可以使用const保护数组不被改变。

指针和const

int age=39;

const int * pt=&age;

pt指向一个const int ,因此不能使用pt来修改这个值,但是可以通过对age的操作来更改age的数值。

int* const pt=&age;//可改变age 不可改变指向

const float g_earth=90.0;

const float *pt =&g_earth;//可以 但是如果指针没有const 则不被允许。

如果数据类型本身并不是指针,则可以将const数据或非const数据的地址赋给指向const的指针,但只能将非const数据的地址赋给非const指针。

使用二维数组 函数原型为 (*ar)[4] 或 ar[][4];

ar2[r][c]=*(*(ar2+r)+c) 二者相等

递归...

函数指针

1.获取函数的地址

获取函数的地址很简单:只要使用函数名即可。也就是说,think()是一个函数而think是该函数的地址。一定要区分函数地址和函数返回值的区别 think为地址而think()为返回值。

2.声明函数指针

函数的特征标(参数)和返回类型必须和pf相同。如果不相同,编译器将拒绝这种赋值。

同时 (*pt)也就代表了函数头think 同样可以用它来代替函数头 但是C++也允许直接使用pt来代替think

例 double think(int); //think为函数

double (*pt)(int );

pt= think;

在定义复杂的函数指针会很麻烦,这时可以选择使用auto pt =think并初始化;

自动类型推断只能用于单值初始化,而不能用于初始化列表。

(完)

你可能感兴趣的:(第七章 函数——C++的编程模块)