C程序设计(谭浩强)--学习笔记

详见微软技术资源库 (http://msdn.microsoft.com/zh-cn/library/dwhawy9k.aspx#example)

文件读写最常用的函数

 - 字符读写函数:         fgetc fputc

 - 字符串读写函数:     fgets fputs

 - 数据块读写函数:     fread fwrite

  - 格式化读写函数:    fscanf fprintf

以上函数都要求包含 stdio.h

文件定位

 rewind(文件指针);                             //把文件内部的位置指针移到文件首部;

 fseek(文件指针,位移量,起始点);     //用于移动文件内部位置指针;

 feof(文件指针);                                   //判断文件是否处于文件结束位置,如文件结束,则返回值为1,否则返回0;

 ferror(文件指针);                                //检查文件在用各种输入输出函数进行读写时是否出错。如ferror返回值为0表示正常,否则表示有错

 clearerr(文件指针);                         //本函数用于清除出错标志和文件结束标志,使它们为0;


位运算符

    &       与

    |         或

    ^        异或

    ~       取反

    <<    左移

    >>    右移

位域 (http://baike.baidu.com/view/1256879.htm) -------个人感觉用到的地方不多


printf函数

scanf函数


for 注意事项


数组

在数组名作为函数参数时所进行的传送只是地址的传送,也就是说把实参数组的首地址赋予形参数组名。

形参数组名取得该首地址之后,也就等于有了实在的数组。(此时形参数组中值的变化会导致实参数值中值的变化)


---------------------------------------------------------------------------------------------------


关于被调函数的说明

如果被调函数的返回值是整型或字符型时,可以不对被调函数做说明,直接调用。

这时系统将自动对被调函数返回值按整型处理。


register变量

        为了提高效率,C语言允许将局部变量的值防砸iCPU中的寄存器中,这种变量叫“寄存器变量”,用关键字register作声明。

        由于受硬件寄存器长度的限制,所以寄存器变量只能是char、int或指针型。
寄存器说明符只能用于说明函数中的变量和函数中的形参,因此不允许将外部变量或静态变量说明为"register"。
        register型变量常用于作为循环控制变量,这是使用它的高速特点的最佳场合。比较下面两个程序的运算速度。

int fac(int n)
{
	register int i,f=1;
	for(i=1;i<=n;i++)
		f=f*i
	return(f);
}
main()
{
	int i;
	for(i=0;i<=5;i++)
	printf("%d!=%d\n",i,fac(i));
}

说明:

        1)只有局部自动变量和形式参数可以作为寄存器变量;

        2)一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量;

        3)局部静态变量不能定义为寄存器变量。

#ifdef

#ifdef 标识符

    程序段1

#else

    程序段2

#endif

它的作用是:当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2。


static
全局变量和全局静态变量的区别
    1)全局变量是不显式用static修饰的全局变量,但全局变量默认是动态的,作用域是整个工程,在一个文件内定义的全局变量,             在另一个文件中,通过extern 全局变量名的声明,就可以使用全局变量。
    2)全局静态变量是显式用static修饰的全局变量,作用域是所在的文件,其他的文件即使用extern声明也不能使用。


静态局部变量有以下特点:
    1)该变量在全局数据区分配内存;
    2)静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;
    3)静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;

    4)它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束;

你可能感兴趣的:(TC学习和总结)