C语言复杂声明的理解
本篇主要记录我现在对 C 语言中复杂声明的理解,以供以后的我参考。
我对复杂声明的疑惑是从一个并不怎么复杂的声明开始的:
|
|
我的本意是声明一个指针数组,每个数组元素再指向一个字符串。当时我就开始迷惑到底是第一行的声明还是第二行的声明?然后我用了最直接的方法,两种都试了一下,发现第一种是正确的。以上虽然解决的眼前的问题,但作为处女座的我本能地想搞清楚对于这种声明应该怎么理解,经过搜索总结出了我自己的方法。
从网上搜索得到的最重要的一条准则是:C 语言中的声明和使用是相一致的(大多数情况下)。例如声明 char *a
,*
为取值符号,对 a
取值为 char
类型,那反过来 a
就是指向 char
类型的指针。
就以 char *a[];
为例,我会列出几个逻辑关系式
a
是一个数组,因为它先和[]
结合a[]
是char *
类型的,这里a[]
可以认为是a
数组中的某一个元素
从以上两条可知这个声明就是我所需要的。而再看看第二个声明表达的意思是什么。
a
是一个指针,因为它先和*
结合*a
是一个数组(*a)[]
是char
类型的
由此可知 a
是指向一个 char
数组的指针。
继续复杂一点的 char *p(char *a, int (*b)(int));
写到这里觉得这种声明还是太简单了,好像没必要讲。。。。。