首页 > 代码库 > [C++]数组指针,数组引用,函数指针

[C++]数组指针,数组引用,函数指针

数组指针是指一个指向数组的指针,例如有一个数组指针p指向一个数组a[],则 *p是取到这个数组,也就是说 *p=a,因此 **p =a[0],

它的定义为:

int a[10];
int (*c)[10]=&a;

(*c)表示它是一个指针,若不加括号则变成 指针数组 ,[10]表示指向一个长度为10的数组,int 表示数组元素为int

因为函数不能返回数组,所以可以设置返回一个数组指针,即

auto fo2(int (&a)[10]) -> int (*)[10]{
    a[5]=10;
    return &a;
}

int (&a)[10] 是一个数组引用,

这里定义fo2的返回类型用了尾置返回类型,int (*)[10]是返回类型。如果直接定义函数,是

int (*fo2(int (&a)[10]))[10];

还是尾置返回清楚一点,:)

事实上虽然为了用指针指向一个数组可以用 int *p=a这样的方式,不过其实这里a跟p是两个东西,p只不过是指向了a头元素的地址,

因此sizeof(a) != sizeof(p),这里也就能理解为什么要用数组引用了,采用了数组引用后,

int fo(int *p){
    return sizeof(p);
}
int fo1(int (&p)[10]){
    return sizeof(p);
}

fo1返回的就是正确的数组内存大小。

函数指针:

使用别名的方式:

typedef int (*f)(int);
f func;

直接定义:

int (*func)(int);

func可以指向任意一个参数为int ,返回为int的函数。

还可以定义函数指针数组:

int (*func[10])(int);

其实都跟定义数组差不多,形式上与函数保持一致就行了。

还有诸如指针的指针的引用:

int a;
int *p=&a;
int **&pp=&p;

引用也只是在名称前加个引用。

[C++]数组指针,数组引用,函数指针