一、数组指针与指针数组
1, 指针数组
所谓指针数组,就是指针组成的数组,即数组的元素为指针
int *pa[SIZE]; //SIZE为元素数目,元素的值为int类型的指针
2, 数组指针
所谓数组指针,就是指向数组的指针,即其是一个指针,指向数组。
int (*pa)[SIZE]; //SIZE为数组的元素数目,pa指向一个大小为SIZE的int类型的数组。
我们说对于定义的一个数组arr[N],arr就是这个数组的首元素地址的首地址。在(*pa)[SIZE]中,pa等于数组的首地址,二者其实在值上是相同的,能不能把arr赋值给pa呢?不可以。区别在于:二者虽然值相同,但意义不同,arr是首元素的首地址,pa是数组的首地址。在运算过程中*(arr+1)相当于访问的是数组元素arr[1];而*(pa+1)则相当于数组首地址加了SIZE。
示例:
char *a[3] = {“ab”,”cd”,”ef”}; //a位数组指针,元素为各字符串的首地址
int a[5] = {1,2,3,4,5};
int (*pa)[5] = &a; //定义pa指向数组a
cout<<*(a+1); //输出2,访问第二个元素
int *aPtr = (int *)(pa+1); //pa+1在数值上相当于a+5;
cout<<*(aPtr-1); //输出5,访问最后一个元素
cout<<sizeof(a); //输出20, 4*5,数组的大小
cout<<sizeof(pa); //输出4,指针的大小
二、函数指针和指针函数
1, 指针函数
int *fun(int a,int b); //函数的返回值是指针
2, 函数指针
int (*fun)(int ,int ); //是一个指针,它指向的是一个函数
示例:
//指针函数示例
int*fun(int size) //指针函数,返回的是指针
{
int*p;
p= malloc(size*sizeof(int));
returnp;
}
函数指针示例
intmax(int a, int b)
{
return a>b? a: b;
}
Void main(){
int (*fun)(int , int);
fun = max;
cout<<(*fun)(2, 3)<<endl;
}