1、关于指针与数组
int vector[10], *vp=vector;
int matrix[3][10],*mp=matrix;
第1个声明是合法的。它为一个整型数组分配内存,并把vp声明为一个指向整型的指针,并把它初始化为指向vector数组的第一个元素。
第2个声明是非法的。它正确的创建了matrix数组,并把mp声明为一个指向整型的指针。但是,mp的初始化是不正确的,因为matrix并不是一个指向整型的指针,而是一个指向整型数组的指针(尽管有的编译器不会发出错误,但会发出警告)。
正确的声明是 int(*P)[10]=matrix;
p=matrix;
p+1=matrix[1]=&matrix[1][0];
p+2=matrix[2]=&matrix[2][0];
关于二维数组,有
matrix=matrix[0]=&matrix[0][0];
matrix[1]=&matrix[1][0]=*(matrix+1)=matrix+1;//是不是有点晕
如果你需要一个指针逐个访问整型元素而不是逐行在数组中移动,则可以如下声明:
int *p=&matrix[0][0];
或者 int *p=matrix[0];
关于数组:
2[vector] :它是合法,把它转换成对等的间接访问表达式*(2+(array))==array[2].
2、关于指针数组
int* api[10];
它是一个拥有10个指针的指针数组
3、函数指针
int f(int);
int(*p)(int)=&f;
int ans;
ans=f(25);
ans=(*p)(25);
ans=p(25);
关于转移表:
double add(double,double);
double sub(double,double);
double mul(double,double);
double div(double,double);
double(*oper_func[])(double,double)={add,sub,mul,div};
初始化列表中各个函数名的正确顺序取决于程序中用于表示每个操作符的整型代码。这个例子假定add是0,sun是1,mul是2,div是3.
调用函数为double result=oper_func[oper](op1,op2);
关于回调函数:
阅读(1084) | 评论(0) | 转发(0) |