C专家编程(三)
来源:互联网 发布:dos怎么运行java 编辑:程序博客网 时间:2024/04/28 18:39
第三章 分析C语言的声明
1、一些声明
非法:
1)函数的返回值不能是一个函数,如:foo()()
2)函数的返回值不能是一个数组,如:foo()[]
3)数组里面不能有函数,如:foo[]()
合法:
1)函数的返回值可以是一个函数指针,如:int (* fun())();
2)函数的返回值可以是一个指向数组的指针,如:int (* fun())[];
3)数组里面可以有函数指针,如:int (* foo[])();
2、结构struct
struct { 内容... };
struct { 内容... } plum,pear; //plum是该结构类型的变量
struct fruit_tag { 内容... } plum,pear; //struct fruit_tag作为struct { 内容... }的简写
为了便于理解,建议把变量的声明与类型的声明分开!
3、联合union
结构中,每个成员依次存储
联合中,所有成员都是从偏移地址0开始存储,意味着某一时刻,只有一个成员真正存储于改地址
用途:(使用同struct)
1)存储互斥的字段,节省空间
2)同一个数据解释成两种不同的东西
4、枚举enum
enum sizes { small=7,middle,large=10,humungous } all;
内容是一些标识符的列表,或者是有一些整型值赋给它们。
缺省时,整型值从0开始。
对列表中某个标识符赋值后,后边的标识符比它大1,依次类推。
5、C语言声明的优先级规则
A 声明从它的名字开始,然后按照优先级读取
B 优先级从高到低依次是:
B. 1 声明中被括号括起来的那部分
B. 2 后缀操作符:括号()表示是一个函数,方括号[]表示是一个数组
B. 3 前缀操作符:星号*表示指向..的指针
C 如果const关键字后面紧随类型说明符,则作用于类型说明符
在其他情况下,const作于于它左边紧邻的指针星号
例子:char * const *(*next)();
next是一个指针,它指向一个函数,该函数返回另一个指针,该指针指向一个类型为char的常量指针。
6、typedef
它为一种类型引入一个新的名字,而不是为变量分配空间。
typedef的格式与变量声明完全一样,只是多了个关键字而已。
普通声明表示“这个名字是一个指定类型的变量”,而typedef表示“这个名字是指定类型的同义词”。
7、typedef和#define的区别
1)可以用其他类型说明符对宏类型名进行进行扩展,但是对typedef却不能
例子:#define peach int
unsigned peach i; //正确
typedef int banana;
unsigned banana i; //错误
2)连续变量声明中,typedef可以保证变量为同一类型
例子:#define int_ptr int *
int_ptr chalk,cheese;
int *chalk,cheeese; //不一致
typedef char * char_ptr;
char_ptr chalk,cheese; //一致
8、名字空间
1)标签名
2)标签
3)成员名
4)其他
同一名字空间,名字必须唯一,不同空间可以存在相同名字。
9、typedef和结构struct
例子:
typedef struct my_tag { int i; } my_type;
struct my_tag variable_1;
my_type variable_2;
这里面my_type作为 struct my_tag { int i; }的简写形式。
typedef struct my_tag1 { int i; } my_type1; // my_type1是结构类型
struct my_tag2 { int i; } my_type2; // my_type2是结构变量
适用场合:
1)数组、结构、指针以及函数的组合类型
2)可移植类型。便于修改,一处代替多处
3)为强制类型转换提供别名
- C专家编程(三)
- C 专家编程 笔记(一、二、三章)
- C 专家编程笔记(三) 数组和指针
- C专家编程(一)
- C专家编程(二)
- C专家编程(一)
- C专家编程(二)
- C专家编程(四)
- C专家编程(五)
- C专家编程(六)
- C专家编程(七)
- C专家编程(八)
- C专家编程(九)
- C专家编程(十)
- C专家编程(十一)
- C专家编程(附录)
- C专家编程(1)
- 《C专家编程》笔记(三)---相邻的字符串自动合并
- 题目1494:Dota(2013年王道论坛计算机考研机试全真模拟考试)
- 课堂作业4
- 位运算
- linux shell ----while Loop
- 传值的一个代码
- C专家编程(三)
- ubifs文件系统简介
- 从一个Activity向另一个Activity传递数据
- POJ 1001
- 题目103:珍惜现在,感恩生活
- eclipse+webservice开发实例
- 【poj2195】【二分图最佳匹配】Going Home
- 编译l链接的原理
- Javascript脚本语言简介、查找元素节点、查看是否存在子节点、根节点