1,
int( *fun() )():fun是一个函数,返回一个指针,指针指向一个int ()类型的函数.
int( *fun())[]:fun是一个函数,返回一个指针,指针指向一个元素为int类型的数组.
int( *fun[] )():fun是一个数组,数组元素是指针,指针指向一个int ()类型的函数.
2,关于联合:
(1)可以通过把两个相互排斥的字段存储于联合中来节省空间.
(2)联合可以把同一种数据解释成两种不同的东西.如:
#include<stdio.h>
union bit_32
{
int whole;
char byte[4];
} value;
int main()
{
value.whole=0x11223344;
printf("%x\n",value.whole);
printf("%x\n",value.byte[0]);
return 0;
}
3,关于枚举:
把一串名字与一串整数值联系在一起.
缺省情况下,整数值从零开始,如果对某个标识符进行了赋值,那么紧接其后的那个标识符的值加1.
枚举的优点:#define定义的名字会在编译时丢弃,而枚举会一直在调试器中出现.
#include<stdio.h>
enum sizes{nu, small=3,medium,large=8,humungous};
int main()
{
printf("%d\n",nu);
printf("%d\n",small);
printf("%d\n",medium);
printf("%d\n",large);
printf("%d\n",humungous);
return 0;
}
4,c语言声明的优先级规则:例如 char* const *(*next)()
(1)从它的名字开始: next
(2)被括号括起来的部分:(*next),next是一个指针
(3)后缀操作符:()表示一个函数,[]表示一个数组
(*next)():next是一个指针,指向一个函数.
(4)前缀操作符:*(*next)(),函数返回一个指针.
(5)char* const *(*next)():函数返回的指针指向类型为char的常量指针.
5,巧用typedef
void (*signal(int sig, void(*func)(int)))(int);
typedef void(*pro_to_func)(int);
上述可以简化为:
pro_to_func signal(int,pro_to_func);
6,typedef 和 define的区别:
(1)#define peach int
unsigned peach i;//没有问题
typedif int banana;
unsigned banana i;//错误,非法
(2)#define int_ptr int *;
int_ptr a,b; 扩展为int * a,b;
//a为int*类型,b为int类型
typedef int * int_ptr;
int_ptr a,b;
//a,b均为int*类型.
建议:不要为了方便对结构体使用typedef,这样做的好处只是省略了关键字struct.
分享到:
相关推荐
(如果你对此还有疑惑的话,建议你去读一读《C编程》的第三章:“分析C语言的声明”) 对于这样一个声明,我们应该如何分析? ——————int f()[]; 首先,f是一个函数,其次,它的返回值是一个整型数组...
第3章 基本数据类型 3.1 声明、表达式和赋值 3.2 基本数据类型 3.3 字符和char数据类型 3.4 int数据类型 3.5 整数类型short、long和unsigned 3.6 浮点类型 3.7 typedef的用法 3.8 sizeof操作符 3.9 使用getchar()...
第3章 条件判断 79 3.1 判断过程 79 3.1.1 算术比较 80 3.1.2 涉及关系运算符的表达式 80 3.1.3 基本的if语句 81 3.1.4 扩展if语句:if-else 84 3.1.5 在if语句中使用代码块 86 3.1.6 嵌套的if语句 87 3.1.7...
第3章 程序设计初步 3.1 面向过程的程序设计和算法 3.1.1 算法的概念 3.1.2 算法的表示 3.2 C++程序和语句 3.3 赋值语句 3.4 C++的输入与输出 *3.4.1 输入流与输出流的基本操作 *3.4.2 在输入流与输出流中使用...
第3章 顺序结构程序 16 3.1 复合语句和空语句 16 3.1.1 复合语句 16 3.1.2 空语句 16 3.2 程序举例 16 习题 17 第4章 选择结构 19 4.1 关系运算和逻辑运算 19 4.1.1 C语言中的逻辑值 19 4.1.2 关系运算符和...
第3章 表达式 33 求值顺序 33 3.1 为什么这样的代码不行?a[i]= i++; 33 3.2 使用我的编译器,下面的代码int i= 7; printf("%d\n", i++ * i++); 打印出49。不管按什么顺序计算,难道不该是56吗? 33 3.3 ...
第3章 表达式 求值顺序 3.1 为什么这样的代码不行?a[i]=i++; 3.2 使用我的编译器,下面的代码inti=7;printf("%d\n",i++*i++);打印出49。不管按什么顺序计算,难道不该是56吗? 3.3 对于代码inti=3;i=i++;...
第3章 文件高级操作 68 3.1 文件的基本概念 68 3.2 标准文件的输入输出操作 68 3.2.1 标准文件输入输出 70 3.2.2 标准文件打开函数fopen() 71 3.2.3 标准文件关闭函数fclose() 74 3.2.4 标准文件...
第3章 语法分析 27 3.1 上下文无关文法 28 3.1.1 推导 29 3.1.2 语法分析树 29 3.1.3 二义性文法 30 3.1.4 文件结束符 31 3.2 预测分析 32 3.2.1 FIRST集合和FOLLOW集合 33 3.2.2 构造一个预测分析器 35 3.2.3 消除...
第3章 程序设计初步 3.1 面向过程的程序设计和算法 3.1.1 算法的概念 3.1.2 算法的表示 3.2 C++程序和语句 3.3 赋值语句 3.4 C++的输入与输出 *3.4.1 输入流与输出流的基本操作 *3.4.2 在输入流与输出流中使用...
第3章 最简单的C程序设计——顺序程序设计 3.1 顺序程序设计举例 3.2 数据的表现形式及其运算 3.2.1 常量和变量 3.2.2 数据类型 3.2.3 整型数据 3.2.4 字符型数据 3.2.5 浮点型数据 3.2.6 怎样确定常量的类型 3.2.7 ...
3. 算法的时间复杂度分析 4. 归并排序 5. 线性查找 6. 折半查找 12. 栈与队列 1. 数据结构的概念 2. 堆栈 3. 深度优先搜索 4. 队列与广度优先搜索 5. 环形队列 13. 本阶段总结 II. C语言本质 14. 计算机中数的表示 1...
第3章 构建嵌入式linux系统 71 3.1 嵌入式系统开发环境的构建 71 3.1.1 嵌入式交叉编译环境搭建 71 3.1.2 minicom和超级终端配置及使用 76 3.1.3 宿主机服务配置 83 3.2 bootloader 87 3.2.1 ...
第3章 语法分析 3.1 上下文无关文法 3.1.1 上下文无关文法的定义 3.1.2 推导 3.1.3 分析树 3.1.4 二义性 3.2 语言和文法 3.2.1 正规式和上下文无关文法的比较 3.2.2 分离词法分析器的理由 3.2.3 ...
第3章 练习反汇编C语言程序 26 3.1 算法的反汇编 27 3.1.1 算法反汇编代码分析 27 3.1.2 算法反汇编阅读技巧 28 3.2 发行版的反汇编 29 3.3 汇编反C语言练习 33 基础篇 内核编程 本书的第二部分,是...
第3章 练习反汇编C语言程序 26 3.1 算法的反汇编 27 3.1.1 算法反汇编代码分析 27 3.1.2 算法反汇编阅读技巧 28 3.2 发行版的反汇编 29 3.3 汇编反C语言练习 33 基础篇 内核编程 本书的第二部分,是...
第3章 练习反汇编C语言程序 26 3.1 算法的反汇编 27 3.1.1 算法反汇编代码分析 27 3.1.2 算法反汇编阅读技巧 28 3.2 发行版的反汇编 29 3.3 汇编反C语言练习 33 基础篇 内核编程 本书的第二部分,是...