C/C++的各种指针或指针数组

C/C++的各种指针或指针数组

以下内容整理自知乎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] 的指针。

反正读的时候,得从内往外看。

猜你喜欢

转载自blog.csdn.net/qq_44575789/article/details/107040655
今日推荐