当前位置:   article > 正文

C/C++的各种指针或指针数组_c++ 数组存放不同类型的指针

c++ 数组存放不同类型的指针

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

以下内容整理自知乎IceBear的回答,在此再次表示感谢。



最简单的例子,定义一个数组

int a[N];
  • 1

数组名 a 就是夹在 int 跟方括号之间


再来一个,指针数组:

int (*p)[N]
  • 1

也就是一个指针变量 p,它指向的东西是一个 int[N] 的数组

那举一反三,* 号改成 & 号:

int (&a)[N]
  • 1

这就是对一个数组的引用,引用的别名就是 a

当然,上一个例子里是 C++ 的,再举一个 C 的例子,

typedef int i3 [3];
  • 1

就是定义了一个类型别名 i3,其相当于 int[3],这句话就相当于后来 C++11 里的

using i3 = int[3];
  • 1


再来一个哈

int a[3];

int (*g()) [3]
{
	return &a;
}

int (*p) [3] = g();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

g 是一个返回数组指针的函数[大笑]

注意哦,g 绝不能写成

int (*) [3] g()
  • 1

或者

(int (*) [3]) g()
  • 1

这两个都识别不了的。

这个语法鬼畜吧?但是用套路去想是很容易理解,甚至不费力就能记住的



再改下

int a[3];

int (&g(int (*t) [3])) [3]
{
	return *t;
}

int (&ref) [3] = g(&a);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

函数指针的话,也和数组的这个语法类似

int f(double)
{
	return 0;
}

int (*g()) (double)
{
	return f;
}

int (*pfun)(double) = g();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

g 就是一个返回函数指针的函数



再来,

int (*p_fun_arr[3]) (double);
  • 1

一个长度为 3 的数组,每个元素是函数指针



还能再来,

int (*a[3]) [4];
  • 1

注意哦,a 不是长度为 4 的数组,它是一个长度为 3 的数组,数组里每个元素都是指向 int[4] 的指针。

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/思考机器2/article/detail/63136
推荐阅读
相关标签
  

闽ICP备14008679号