博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第14章 结构和其他数据形式 14.13 奇特的声明
阅读量:7173 次
发布时间:2019-06-29

本文共 1189 字,大约阅读时间需要 3 分钟。

hot3.png

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

你可能感兴趣的文章
fixed的left:50%,漂浮
查看>>
浅谈JAVA集合框架
查看>>
iOS_8_键盘操作简单
查看>>
Android数据缓存(转)
查看>>
用 windows GDI 实现软光栅化渲染器--gdi3d(开源)
查看>>
Jenkins快速上手
查看>>
Android 工程目录结构简介
查看>>
HashMap、HashTable、LinkedHashMap和TreeMap用法和区别
查看>>
ubuntu解决arm-linux-gcc no such file的问题
查看>>
Activity设置singleTask无法通过Intent获取值的问题
查看>>
python之模块copy,了解概念即可
查看>>
还是回文(dp)
查看>>
oracle创建表
查看>>
解决 Eclipse build workspace 慢,validation javascript 更慢的问题
查看>>
jquery ajax验证用户名是否存在(后台spring mvc)
查看>>
WPF控件--利用Winform库中的NotifyIcon实现托盘小程序
查看>>
动物统计加强版(贪心,字典序)
查看>>
LeetCode - 15. 3Sum
查看>>
Hadoop 之 MapReduce 框架演变详解
查看>>
linux下获取硬盘使用情况
查看>>