初学者在面对各种复杂的声明面前往往不知所措,甚至可以说一头雾水,不知道从何下手,本文就C语言中各种复杂的声明浅谈一下,希望可以帮助到初学者,下次再遇到复杂的声明时不在迷茫。
我们先来了解一下复杂的声明的一些符号
符号 | 含义 |
---|---|
* | 表示一个指针 |
( ) | 表示一个函数 |
[ ] | 表示一个数组 |
下面是一些较复杂的声明示例:
如果能够把下面的例子都看懂的话,那说明你很优秀哦~
1.int board[8] [8]; //声明一个内含int数组的数组
2.int ** ptr; //声明一个指向指针的指针,被指向的指针指向int
3.int * risks[10]; //声明一个内含十个元素的数组,每个元素都是一个指向int的指针
4.int (* rusks)[10]; //声明一个指向数组的指针,该数组内含十个int类型的值
5.int * oof[3] [4]; //声明一个3*4的二维数组,每个元素都是指向int类型的指针
6.int (* uuf)[3] [4]; //声明一个指向3*4二维数组的指针,该数组中内含int类型的值
7.int (*uof[3])[4]; //声明一个3个指针元素的数组,其中每个指针都指向一个内含4个int类型元素的数组
要看懂以上声明,关键要理解 * 【】 ()的优先级。要记住,()【】的优先级相同且大于的优先级,并且()【的结合方向是从左向右。
接下来我们逐个来进行分析:
1.int board 【8】【8】 ;
根据优先级,board先与【8】结合,说明这是一个数组,再与【8】结合,说明这是一个数组的数组,也就是二维数组。
2.int ** ptr;
根据优先级,ptr先与星号结合,说明这是一个指针,再与星号结合说明这是一个指向指针的指针,也就是二级指针。
3.int * risks[10];
根据优先级,ricks先与【10】结合,所以这是一个数组,再与星号结合,说明数组中的元素是指针变量。也就是指针数组
4.int (* rusks)[10];
根据优先级,rusks先与星号结合,说明这是一个指针,再与【10】结合,说明这是一个指向数组的指针,也就是数组指针
5.int * oof[3] [4];
根据优先级,oof先与【3】结合,说明这是一个数组,再与【4】结合说明这是一个数组的数组,也就是二维数组,再与星号结合,说明二维数组中的每个元素都是指针变量。
6.int (* uuf)[3] [4];
根据优先级,uuf先与星号结合,说明这是一个指针,再与【3】结合,说明这是一个指向数组的指针,再与【4】结合,说明只这是一个指向一个二维数组的指针。
7.int (*uof[3])[4];
根据优先级,uof先和【3】结合,说明这是一个数组,再和星号结合,说明数组中的元素是指针变量,再和【4】结合,说明其中每个指针都指向一个内含4个int类。