C++ PRIMERPLUS chapter7

void a(int b,int c) 必须分开 不能Int b,c; 

原型中变量名可以省略  void a (int,float) 不过两个参数类型相同的时候最好加上

 

数组名通常代表地址  然而有一些例外 如 声明时数组名标记存储位置  对数组名用sizeof得到整个数组长度   &用于数组名得到整个数组地址

 

函数头和函数原型中 int *arr 和 int arr[]等价  都把arr当成指向int的指针

 

sizeof cookies 是整个数组的长度 传递给arr 后 sizeof arr只是指针的长度  所以必须显示传递数组长度 指针本身没有数组长度

 

int age = 39

const int * pt = &age  不能用pt来修改 const int ; *pt为const   但是 age不是常量 

而且 pt的值也是可以修改的  如 pt= &sage   但是int sloth = 1; int * const finger = &sloth;  不能修改finger的值 你也可以 const int * const stick = &trouble  stick啥也不能改

const常量能给const指针 但是 const的地址不能给普通指针

const float g_moon = 1.63

float *pm = &g_moon;

同理 二层const指针 为 一层常态指针 然后指向一个const常量 

如 const int ** pp2;

  int *p1;

  const int n = 13;

pp2 = & p1;  //假设能行

*pp2 = &n;//pp2的解指向 n的地址 因为都是const 所以通过

*p1 = 1;  //则可以用1来改const

 

int ar2 [r][c]==*(*ar2 + r)+c)  ar2为c个int组成的数组  他是元素0个

 

while(n-->0)  最后循环先作为1检测 然后自减 变为0

cmath中atan2可以根据xy计算角度

cin >>a>>b; 在表达式中 cin返回一个被转化为bool的值   如int a b  输入q 返回为false

 

在递归内调用两次自身 复杂度将指数级上涨 然而层次较少这种方法就挺精致

 

 

函数指针

think()是一个函数

process(think)  //传递函数think的地址

thought(think())  //传递函数的返回值

 

声明函数指针

double pam(int)  //函数原型

double (*pt) (int)  //函数指针   pt=pam;

可以先声明原型 在用(*XX)代替原来的pam   (*pt) (int)是一个指向函数的指针

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

然而pt(5)和(*pt)(5)都可以调用pam  这是一种折中的操作 //函数名和 对函数地址的解引用

 

基本类型不用const  如int  传递值使用副本

 按值传递 glitz  按地址 &glitz

posted @ 2019-01-07 13:44  Cyborg  阅读(135)  评论(0)    收藏  举报