C++编程模块

1.p213

函数用指针来处理数组

当且仅当用于函数头或函数原型中, int*arr 和int arr[]  的含义是相同的 

int sum = sum_arr(cookies,arsize);

cookies是其第一个元素,因此是函数传递的是地址。

int sum_arr(int *arr,int n)  //or  int arr[]

当指针指向一个独立的值时,使用指针表示法。

2.p215

cookies 和 arr 指向同一个地址, 

sizeof cookies    32

sizeof arr          4

 这是由于sizeof cookies 是整个数组的长度, 而sizeof arr 只是指针变量的长度。

这也是必须显式传递数组长度,而不能在sun_arr中使用sizeof arr 的原因

指针本身并没有指出数组的长度

3.p217

const保护数组

void show_array(const double ar[],int n)

4.p220

使用数组区间的函数

通过两个指针来完成

一个指针标识数组的开头,另一个指针标识数组的尾部

int sum_arr(int *begin, int *end)

 

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

  total = total+*pt;

5.p221

指针和const

一种是让指针指向一个常量对象,防止使用该指针来修改所指向的值      const int *ps =&sloth;

另一种将指针本身声明为常量,防止改变指针指向的位置       int * const finger =&sloth;

6.p224

函数和二维数组

//data为二维数组
int total = sum(data,3);

int sum(int (*ar2)[4],int size);//由4个指向int的指针组成的数组
int sum(int ar2[][]4,int size);//ar2为指针,

 

 7.p234

传递结构的地址

不能将成员运算符句点用于结构名,用箭头成员运算符 ->  eg:  ps->price 

void show_poloar(const ploar *pda)
{
  ...
  cout<<"distance = "+<<pad->distance;
  cout<<",angle = "<<pda->angle*Rad_to_deg;
  ...       
}

函数返回一个新的结构,而是修改调用函数中已有的结构,所以第一个参数const指针,第二个不是。

void rect_to_polar(const rect*pxy,ploar *pda);
void show_polar(const polar *pda);

传递结构跟传递结构地址 差别在于,后者使用的是地址,让函数能够对原始结构进行操作。

8.

p.236

getline(cin,list[i]);

9.p239

递归

void recurs(argumentlist)
{
   statements1
  if(test)
    recurs(argements)
    statements2
}                

只要if语句为true,每个recurs()调用都将执行statements1  然后再调用recurs().当if语句为false时,当前调用将执行statements2。当前调用结束后,程序控制权将返回给调用它的recurs(),而该recurs()将执行器statament2部分,然后结束,并将控制权返回给前一个调用,以此类推。      如果recurs()调用5次,则  statements1 顺序执行5次,然后statements2部分将以反顺序执行5次。

 

10.p241

函数指针

 1)获取函数的地址,, 即函数名(不带参数不带括号)

  区分传递的是地址还是函数的返回值      process(think);    thought(think());

2)声明函数指针

函数原型:   double pam(int)

则正确的指针类型声明:   double (*pf)(int)      必须指定指针的指向

与pam()声明类似,这是将pam替换为了(*pf) ,由于pam是函数,因此(*pf)也是函数,则 pf就是函数指针。

*pt(int)  pf()是一个返回指针的函数

(*pt)(int)一个指向函数的指针

赋值: (返回类型需一致,否则编译不通过)

double ned(double);
double (*pt)(double);
pt = ned;

调用:

estimate(50,pam);

3)使用指针来调用函数  (使用 (*pf)时,只需将它看作函数名即可)

double pam(int);
double(*pf)(int);
pf = pam;
double x =pam(4);
double y = (*pf)(5);//c++中也可以:  double x = pf(5)

 

  

 

 

posted @ 2012-12-06 12:35  不想当元帅的好兵。  阅读(190)  评论(0编辑  收藏  举报