C语言笔记
2014-03-11 00:25
274 查看
条件编译:
一个.c文件对应一个.h文件:在.c文件里面具体的定义函数的功能,在.h文件里面声明.c文件里面的函数和定义一些全局变量。通常每一个.h文件的代码格式:(叫条件编译头文件处理,是为了防止一个头文件被重复包含,降低编译的出错率)
#ifndef _DEFINE_H
#define _DEFINE_H
······
#endif
特殊宏定义:
重新定义一些类型,防止由于不同平台的编译器的不同而产生字节数的不同,这样方便代码移植。关键字的改名称,一般是用typedef特殊宏定义,而不是#define。
格式:typedef unsigned char uchar;//一定要记得加“;”。
类型修饰符:
volatile:作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。简单地说就是防止编译器对代码进行优化。比如如下程序:
XBYTE[2]=0x55;
XBYTE[2]=0x56;
XBYTE[2]=0x57;
XBYTE[2]=0x58;
对外部硬件而言,上述四条语句分别表示不同的操作,会产生四种不同的动作,但是编译器却会对上述四条语句进行优化,认为只有XBYTE[2]=0x58(即忽略前三条语句,只产生一条机器代码)。如果键入volatile,则编译器会逐一的进行编译并产生相应的机器代码(产生四条代码)。
关键字:static
(1)作用于变量:在函数内部的话是局部变量,该变量的作用域局限于函数内部,但是跳出函数时不释放其占用的内存,因此有“记忆”功能;在函数外部的话,缩小外部变量的作用域,即从定义处开始往下的地方才可以使用,如果前面需要用到需要在使用前加extern的声明,同时该变量只局限于本文件中使用。
(2)作用于函数:对函数的连接方式产生影响,该函数只在本文件内部有效,对其他文件不可见。这样的函数又叫作静态函数。使用静态函数的好处是,避免与其他文件的同名函数产生干扰,也可以说是对函数本身的一种保护。
auto:在函数里面定义变量没有加auto或者是static时默认就是auto自动变量。自动变量只定义在函数内部。
字节数计算:sizeof( ),该函数在stdio.h中定义
sizeof(int);//这个函数的返回值是4
int a[8]; sizeof(a);//这时函数的返回值是4*8=32
数组:
二维数组:是以数组为数组元素的数组。数组的大小在编译其间就要确定大小,其实C语言只允许一维数组,但是它的元素可以是数组,当然这样就可以仿真出多维的数组了。
int week[7][24];
int *p,i;
p=week[2]; //切记week[2]在这里是表示地址
i=*(week[2]+1); //等价于i=week[2][1];
sizeof(week[1])在这里的值是4x24,sizeof(week[2])也是一样的,这就说明元素week[i]是数组咯
指向数组元素的指针和指向数组的指针:对后者的理解:int (*p) [3];这就定义了一个可以指向整型的且包含3个元素数组。
return:一个函数中可以有多个return语句,但是函数只会执行其中的一个return语句,因为执行完这个语句就跳出了该函数。
一个.c文件对应一个.h文件:在.c文件里面具体的定义函数的功能,在.h文件里面声明.c文件里面的函数和定义一些全局变量。通常每一个.h文件的代码格式:(叫条件编译头文件处理,是为了防止一个头文件被重复包含,降低编译的出错率)
#ifndef _DEFINE_H
#define _DEFINE_H
······
#endif
特殊宏定义:
重新定义一些类型,防止由于不同平台的编译器的不同而产生字节数的不同,这样方便代码移植。关键字的改名称,一般是用typedef特殊宏定义,而不是#define。
格式:typedef unsigned char uchar;//一定要记得加“;”。
类型修饰符:
volatile:作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。简单地说就是防止编译器对代码进行优化。比如如下程序:
XBYTE[2]=0x55;
XBYTE[2]=0x56;
XBYTE[2]=0x57;
XBYTE[2]=0x58;
对外部硬件而言,上述四条语句分别表示不同的操作,会产生四种不同的动作,但是编译器却会对上述四条语句进行优化,认为只有XBYTE[2]=0x58(即忽略前三条语句,只产生一条机器代码)。如果键入volatile,则编译器会逐一的进行编译并产生相应的机器代码(产生四条代码)。
关键字:static
(1)作用于变量:在函数内部的话是局部变量,该变量的作用域局限于函数内部,但是跳出函数时不释放其占用的内存,因此有“记忆”功能;在函数外部的话,缩小外部变量的作用域,即从定义处开始往下的地方才可以使用,如果前面需要用到需要在使用前加extern的声明,同时该变量只局限于本文件中使用。
(2)作用于函数:对函数的连接方式产生影响,该函数只在本文件内部有效,对其他文件不可见。这样的函数又叫作静态函数。使用静态函数的好处是,避免与其他文件的同名函数产生干扰,也可以说是对函数本身的一种保护。
auto:在函数里面定义变量没有加auto或者是static时默认就是auto自动变量。自动变量只定义在函数内部。
字节数计算:sizeof( ),该函数在stdio.h中定义
sizeof(int);//这个函数的返回值是4
int a[8]; sizeof(a);//这时函数的返回值是4*8=32
数组:
二维数组:是以数组为数组元素的数组。数组的大小在编译其间就要确定大小,其实C语言只允许一维数组,但是它的元素可以是数组,当然这样就可以仿真出多维的数组了。
int week[7][24];
int *p,i;
p=week[2]; //切记week[2]在这里是表示地址
i=*(week[2]+1); //等价于i=week[2][1];
sizeof(week[1])在这里的值是4x24,sizeof(week[2])也是一样的,这就说明元素week[i]是数组咯
指向数组元素的指针和指向数组的指针:对后者的理解:int (*p) [3];这就定义了一个可以指向整型的且包含3个元素数组。
return:一个函数中可以有多个return语句,但是函数只会执行其中的一个return语句,因为执行完这个语句就跳出了该函数。
相关文章推荐
- 学生信息管理系统
- 深入理解C语言-05 语句
- C++之指针,引用与数组
- 读书笔记_Effective_C++_条款三十四:区分接口继承和实现继承
- 汉诺塔算法——C语言递归实现
- 【黑马程序员】C语言学习笔记之变量与内存(五)
- [C++] 虚函数对C++对象内存模型的影响
- 2014年3月份c++复习总结
- C++常见面试题
- 开放源码 C/C++ 单元测试工具,第 1 部分: 了解 Boost 单元测试框架
- c语言中两个scanf为什么会出毛病?
- effective c++:尽量替换define,确保对象使用前初始化
- C++ 编程规范101读书笔记(3)编程风格
- C++ char*,const char*,string的相互转换
- C++ 编程规范101读书笔记(2)设计风格
- Windows下用C++关闭某个窗口的简单方法
- c++ 64位二进制 移位运算并输出结果
- c++ 多维数组创建
- C++默认流的输出有效位是6位。
- c++获取程序目录