C++ primer plus 第7章 函数——C++的编程模块

1. C++函数返回值不能是数组,可以是其他任何类型:整数、浮点数、指针、结构、对象
2. 函数通过将返回值复制给指定的CPU寄存器或内存单元中来将其返回。调用程序将查看该内存单元。
    返回函数和调用函数必须就该内存单元中存储的数据类型达成一致。
3. C++的编程风格是将main()放在最前面,因为它通常提供了程序的整体结构
4. 数组形参
int sum_arr ( int arr[ ], int n );
arr时间上是一个指针,所以也可以写成
int sum_arr ( int * arr, int n );
在C++中,当且仅当用于函数头或函数原型中,int * arr和int arr[ ]的含义是相同的,都意味着arr是一个int指针
两个恒等式
arr[ i ] = *(arr+i);
&arr[ i ] = arr + i; 
将指针加1,实际上是加上了一个与指针指向的类型的长度相等的值
5. 为防止函数无意中修改数组的内容,可在声明形参时使用关键字const
void show_array(const double ar[ ], int n);
6. 使用数组区间传递参数
通过传递两个指针:一个指针标识数组的开头,另一个指针标识数组的尾部。STL使用超尾的概念来指定区间,对于数组而言,标识数组结尾的参数将是指向最后一个元素后面的指针。
根据指针减法规则,end-begin等于数组元素数目。
7. 指针和const
两种方式将const用于指针:指针指向一个常量对象,可以防止指针修改所指向的值
                                            指针本身声明为常量,可以防止指针改变指向的位置
7.1 指向常量的指针
int a = 1;
const int * pt = &age;
pt指向一个const int,不能用pt来修改这个值。
并不意味着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;
pt只能指向a,可以修改a的值

可以声明指向const的const指针,则地址本身和指向的值都不能修改

7.3 函数和二维数组
int sum( int (*ar2)[4], int size );
第一个参数表示指向一个由四个int组成的数组的指针。
括号不可少。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)代替原型中的函数名即可
必须有括号,否则double *p(int)表示返回指针的函数。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值