写博客的目的主要是为了加深印象强化记忆
前几天看到的一篇文章介绍了这个东西:char *(*(*x[3])())[5]
有时候为了自己理解也为了他人能更容易理解
话可以正着说一遍再反着说一遍
比如正着说:
首先这里定义了一个变量 x
我们定位到x 它的左边是一个 * 说明它是一个指针
是指针就要问它的指针类型是什么 我们看看x的右边
是一个有三个元素的数组说明x作为一个指针它指向一个有三个元素的数组
看到数组就要问数组中的元素是什么类型 我们将视野扩大一层
x的外层有一对括号 括号左边是一个星星 说明数组中的元素是3个指针
指针的类型是什么呢? 括号的右边还是一对括号 这个代表函数 而且括号里
什么都没有说明函数没有参数 就是说数组中的3个指针是三个没有参数的函数指针
遇到函数就要问 函数的返回值是什么类型
我们再将视野扩大一层 外层还是一对括号 括号左边是一个星星 说明函数
返回一个指针 指针的类型是什么呢?看最右边是一个数组 数组的元素是
什么类型?看最左边 是char
反着说一遍(或者这才是正着说 上面是?):
有这么一个函数 它没有参数 返回一个5个元素的数组指针(数组里面可以装5个 char)
我们将三个这样的函数取到它们的地址 然后装进一个数组
再取到这个数组的地址 这个地址就是我们要定义的变量 x