一些包含指针概念的复杂类型,最基本的还是通过编译器来进行最基本的判断。
很多初学者由于不愿意对一些类型进行系统的认识和学习,导致一进入编程状态便受到了复杂类型的重重阻碍。因此希望看到这篇博客的学习者能坚持看完,并且希望对你以后的编程生涯有所帮助。
那么开始我们的话题吧
编译器是如何进行判断一个我们看起来那么令人头疼的复杂类型的?
答案是:优先级。
和运算的优先级一样,优先级的层层判断,可以使我们和编译器一样,推断出一个具体的类型具体是什么,推断它负责进行什么操作。
那么开始我们的解析吧。我们将从最简单的类型开始,直至你曾害怕了解的一些类型。
- 指针
1 | int ptr; //首先ptr是变量名,它与int结合,说明ptr是一个整型变量。 |
1 | int *ptr; //也些程序员习惯写成 int* ptr,这两种表示的其实都一样,看个人习惯而已。 |
1 | int **ptr; //首先ptr是变量名。 |
- 数组
1 | int ptr[10]; //首先ptr是变量名. |
- 指针和数组的混合结构类型
1 | int *ptr[10]; //首先ptr是变量名. |
1 | int (*ptr)[10]; //首先ptr是变量名。 |
- 函数
1 | int ptr(char); //首先ptr是变量名。 |
5.指针和函数的混合结构类型
1 | int *ptr(char); //首先ptr是变量名。 |
1 | int (*ptr)(char); //首先ptr是变量名。 |
- 指针,数组和函数的混合结构类型
1 | /* |
1 | int (*(*ptr(char)))[10]; //首先ptr是变量名。 |