1. C++函数返回值不能是数组,可以是其他任何类型:整数、浮点数、指针、结构、对象
2. 函数通过将返回值复制给指定的CPU寄存器或内存单元中来将其返回。调用程序将查看该内存单元。
返回函数和调用函数必须就该内存单元中存储的数据类型达成一致。
3. C++的编程风格是将main()放在最前面,因为它通常提供了程序的整体结构
4. 数组形参
int sum_arr ( int arr[ ], int n ); |
int sum_arr ( int * arr, int n ); |
两个恒等式
arr[ i ] = *(arr+i);
&arr[ i ] = arr + i;
|
5. 为防止函数无意中修改数组的内容,可在声明形参时使用关键字const
void show_array(const double ar[ ], int n); |
通过传递两个指针:一个指针标识数组的开头,另一个指针标识数组的尾部。STL使用超尾的概念来指定区间,对于数组而言,标识数组结尾的参数将是指向最后一个元素后面的指针。
根据指针减法规则,end-begin等于数组元素数目。
7. 指针和const
两种方式将const用于指针:指针指向一个常量对象,可以防止指针修改所指向的值
指针本身声明为常量,可以防止指针改变指向的位置
7.1 指向常量的指针
int a = 1;
const int * pt = &age;
|
并不意味着pt指向的值实际上就是一个常量,而只是对pt而言,这个值是常量。a可以修改a的值,但是不能通过pt修改。
只能放置修改pt指向的值,不能防止修改pt的值,可以将一个新地址赋给pt,但是仍不能修改它所指向的值
- 允许将const变量的地址赋给指向const的指针
const float a = 9.8;
const float * pa = &a;
|
- 不允许将const变量的地址赋给常规指针
如果数据类型本身并不是指针,则可以将const数据或非const数据的地址赋给指向const的指针
7.2 指针本身为常量
int a = 3;
int * const pt = &a;
|
可以声明指向const的const指针,则地址本身和指向的值都不能修改
7.3 函数和二维数组
int sum( int (*ar2)[4], int size ); |
括号不可少。int *ar2[4]表示由4个指向int的指针组成的数组。
另外一种更写法:
int sum(int ar2[ ][4], int size ); |
7.4 函数和字符串
处理字符串中字符的标准方式:
while(*str) // not '\0'
{
statements;
str++;
}
|
7.5 函数指针
函数的地址是存储其机器语言代码的内存的开始地址
1. 函数的地址就是函数名
区分传递的是函数的地址还是函数返回值:
process(think); //传地址
process(think()); // 传递函数返回值
|
2. 声明函数指针
指定函数的返回类型及参数列表
函数原型double pam(int);的函数指针为:
double (*p)(int); //用(*p)代替原型中的函数名即可 |