码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-08-06 13:59:22      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:size   为什么   个数   定义   color   数组指针   函数指针   一点   名称   

数组指针是指一个指向数组的指针,例如有一个数组指针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++]数组指针,数组引用,函数指针

标签:size   为什么   个数   定义   color   数组指针   函数指针   一点   名称   

原文地址:http://www.cnblogs.com/fsh01/p/7294249.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!