C语言中用户标识符的作用域和存储类
在函数内部或复合语句内部定义的变量,称为局部变量。如函数的形参
在函数外部定义的变量,称为全局变量
C语言中,有两种存储类别:自动类和静态类。局部变量既可以说明成自动类,也可以说明成静态类;而全局变量只能是静态类。
有四个与两种存储类别有关的说明符:auto(自动)、register(寄存器)、static(静态)、extern(外部)可以放在类型名的左右。如:auto int i; int auto i;
auto和register是自动类变量,
全局变量只有静态一种类别。对于全局变量可以用extern和static两种说明符。作用域从变量定义的位置开始到整个源文件结束。
编译预处理和动态存储分配
在c语言中,凡是以“#”号开头的行,都称为编译预处理命令行。
动态分配系统有四个函数:malloc、calloc、free、realloc、使用这些函数时必须包含头文件stdlib.h
malloc函数的返回值类型为void*,函数的调用形式为:malloc(size);要求size的类型为unsigned int。
free函数的调用形式为:free§;
calloc函数返回值的类型为void*,函数的调用形式为:callooc(n, size);要求n和size的类型都为unsigned int。
结构体、共用体和用户定义类型
C语言允许使用typedef说明一种新类型名,一般形式为:
typtdef 类型名 标识符;
“类型名”必须是在此语句之前已有定义的类型标识符。“标识符”时一个用户定义标识符,用作新的类型名。typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原有类型名依然有效。
结构图类型说明的一般形式未:
stuct 结构体标识名
{
类型名1 结构成员名表1;
类型名2 结构成员名表2;
‘’‘
类型名n 结构成员名表n;
};
注意:结构体说明要以分号结尾
可以用以下四种方式定义结构体的变量、数组和指针变量:
(1)紧跟在结构体类型说明之后进行定义
(2)在说明一个无名结构体类型的同时,直接进行定义
(3)先说明结构体类型,再单独进行变量定义
(4)使用typedef说明一个结构体类型名,再用新的类型名来定义变量。
若已定义了一个结构体变量和基类型为同一结构体类型的指针变量,并使该指针指向同类型的变量,则可以用以下三种形式来引用结构体变量中的成员。
(1)结构体变量名 . 成员名
(2)指针变量名->成员名
(3)(*指针变量名). 成员名
共用体类型的说明
union共用体标识名
{
类型名1 共用体成员名1;
类型名2 共用体成员名2;
…
类型名n 共用体成员名n;
};
共用体变量中的成员引用
(1)共用体变量名 . 成员名
(2)指针变量名->成员名
(3)(*指针变量名). 成员名
位运算
位运算符
“~”按位取反
“<<”左移
">>"右移
"&"按位与 全1为1,有0为0
"|"按位或 全0为0,有1为1
“^”按位异或 相同为0,不同为1
文件
定义文件类型指针变量一般形式为:
FILE *指针变量名;
打开文件
fopen(文件名,文件使用方式);
关闭文件
fclose(文件指针);
调用getc(fgetc)和putc(fputc)函数进行输入和输出
putc函数的调用形式为:
putc(ch,fp);
ch是待输出的某个字符,fp是文件指针
fputc函数的调用形式和功能与putc函数完全相同
getc函数的调用形式为:
ch = getc(pf);
pf是文件指针
fgetc函数的调用形式和功能与getc函数完全相同
feof函数可以判断二进制文件是否结束,也可以判断文本文件是否结束。
fscanf函数和scanf函数相似,只是输入的对象是磁盘上文本文件中的数据
fscanf(文件指针,格式控制字符串,输入项表);
fprintf函数和printf函数相似,只是输出的内容将按格式存放在磁盘的文本文件中。
fprintf(文件指针,格式控制字符串,输出项表);
fgets函数用来从文件中读入字符串
fgets(str,n,fp);
fp是文件指针str是存放字符串的起始地址,n是一个int型变量
fputs函数用来把字符串输出到文件中
fput(str,fp);
fread和fwrite函数分别用来读、写二进制文件
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
buffer是数据块的指针,size表示每个数据块的字节数。count用来指定每读、写一次,输入或输出字符快的个数
fseek函数用来移动文件位置指针到指定的位置上
fseek(pf,offset,origin);
pf是文件指针,offest是以字节为单位的位移量为长整型数,origin是起始点用以指定位移量是以哪个位置为基准,起始点既可以用标识符来表示,也可以用数字来表示。
ftell函数可以获得文件当前指针的位置
long t;
t = ftell(fp);