数组作为函数的参数输入时,视为数组首地址即第一个成员的地址
接受数组名参数的函数访问的是原始数组,而不是其副本。
如果不想修改数组可以使用const保护,例如:const int ar[]
指针和const
const int *pt; pt指向一个const int 所以不能通过pt修改他,可以将新地址赋值给pt。
可以将const变量的地址赋值给const的指针,但是不能将const的地址赋值给普通指针。
int * const pt = &sloth; pt只能指向sloth,但是可以修改他的值。
函数指针
const double * f1(const double ar[] , int n);
const double * f2(const double [] , int);
const double * f3(const double * , int);
这三种等价
声明一个指针指向这三个函数之一:const double * (*p1)(const double *, int) = f1;
注意区分:*pd[3]一个包含3个指针的数组
(*pd)[3]一个指针指向一个包含3个元素的数组
auto pb = pa;
auto pc = &pa;
则pc任何操作都要比pb多一次解引用
使用typedef可以简化操作,例如:typedef const double * (*p_fum)(const double * , int);
p_fum pa[3] = {f1,f2,f3};
p_fum (*pa)[3] = &pa;