赞
踩
以下内容整理自知乎IceBear的回答,在此再次表示感谢。
最简单的例子,定义一个数组:
int a[N];
数组名 a 就是夹在 int 跟方括号之间
再来一个,指针数组:
int (*p)[N]
也就是一个指针变量 p,它指向的东西是一个 int[N] 的数组
那举一反三,* 号改成 & 号:
int (&a)[N]
这就是对一个数组的引用,引用的别名就是 a
当然,上一个例子里是 C++ 的,再举一个 C 的例子,
typedef int i3 [3];
就是定义了一个类型别名 i3,其相当于 int[3],这句话就相当于后来 C++11 里的
using i3 = int[3];
再来一个哈
int a[3];
int (*g()) [3]
{
return &a;
}
int (*p) [3] = g();
g 是一个返回数组指针的函数[大笑]
注意哦,g 绝不能写成
int (*) [3] g()
或者
(int (*) [3]) g()
这两个都识别不了的。
这个语法鬼畜吧?但是用套路去想是很容易理解,甚至不费力就能记住的
再改下
int a[3];
int (&g(int (*t) [3])) [3]
{
return *t;
}
int (&ref) [3] = g(&a);
函数指针的话,也和数组的这个语法类似
int f(double)
{
return 0;
}
int (*g()) (double)
{
return f;
}
int (*pfun)(double) = g();
g 就是一个返回函数指针的函数
再来,
int (*p_fun_arr[3]) (double);
一个长度为 3 的数组,每个元素是函数指针
还能再来,
int (*a[3]) [4];
注意哦,a 不是长度为 4 的数组,它是一个长度为 3 的数组,数组里每个元素都是指向 int[4] 的指针。
反正读的时候,得从内往外看。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。