第14章 结构和其他数据形式 14.13 奇特的声明

C允许您创建精心定制的数据形式。虽然我们坚持使用简单的形式,但是我们觉得应该指出这些可能性。当进行一个声明时,可以添加一个修饰符来修饰名称(或标识符)。

修饰符  含义
*表示一个指针
()表示一个函数
[]表示一个数组

C允许同时使用多于1个的修饰符,这就使得可以创建如下各种各样的类型:

int board[8][8];              //int数组的数组

int **ptr;                        //指向int的指针的指针

int *risks[10];                 //具有10个元素的数组,每个元素是指向int的指针

int (*rusks)[10];             //一个指针,指向具有10个元素的数组

int *oof[3][4];               //一个3*4的数组,每个元素是一个指向int的指针

int (*uuf)[3][4];            //一个指针,指向3*4的int数组

int (*uof[3])[4];           //一个具有3个元素的数组,每个元素指向具有4个元素的int数组的指针

弄清楚这些声明的诀窍便于理解使用修饰符的顺序。下面这些规则会让您对其有所了解:

1、表示一个数组 的[]和表示一个函数的()具有同样的优级级,这个优先级高于间接运算符*的优先级。这意味着下面的声明使得risks是一个指针的数组, 而不是一个指向数组的指针;

int *risks[10];

2、[]和()都是从左到右的顺序进行结合的。下面的声明使得goods是一个由12个具有50个int值 的数组构成的数组,而不是相反。

int goods[12][50];

3、[]和()具有相同的优先级,但由于它们是从左到右结合的,所以下面的声明在应用方括号之前先将*和rusks组合在一起。这意味着rusks是一个指向具有10个int值的数组的指针。

int (*rusks)[10];

这些规则同样也产生下面的类型:

char * fump();    //返回指向char的指针的函数

char (*fump)()   //指向返回类型为char的函数的指针

char(*flump[3])()//由3个指针组成的数组,每个指针指向返回类型为char的函数

可以使用typedef 建立一系列相关的类型:

typedef int arr5[5];

typedef arr5 * p_arr5;

typedef p_arr5 arrp10[10];

arr5 togs;  //togs是具有5个元素的int 数组

p_arr5 p2; //p2是一个指针,指向具有5个元素的int数组

arrp10 ap;  //ap是具有10个元素的指针数组,每个指针指向具有5个元素的int数组

当把结构也带入这样的描述中,声明的可能性是会变得很复杂,至于 应用,我们就不再讨论了。

转载于:https://my.oschina.net/idreamo/blog/868052

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值