“慈母手中线,游子身上衣。临行密密缝,意恐迟迟归。”
其实这首诗放在这里是不太合适的,我其实只是想表达目前紧张的现状。我就是那个游子,只是出门前的破衣服得由我自己来缝。这件破衣服指的是我过去所学。之所以这么说,并不是因为没好好学,只是学的越多,越觉得不够,就越想学。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1,C语言可以处理的文件类型有:文本文件,二进制文件
一般来说,人类可读的文件都作为文本文件,例如一片文章。其余都作为二进制文件,例如一个程序。
在C语言中,文件的操作是通过FILE结构体进行了,利用fopen返回一个指向FILE结构体的指针,在使用fopen函数过程中,使用mode控制符对是否打开哪类文件进行控制:
FILE *fopen( const char *filename, const char *mode );
filename:文件名,mode:打开的模式,规定了是可读、可写、追加之类的属性。
r 以只读方式打开文件,该文件必须存在。
r+ 以可读写方式打开文件,该文件必须存在。
rb+ 读写打开一个二进制文件,允许读写数据,文件必须存在。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
如果调用失败,返回一个空指针。
2,C语言程序的三种基本结构是:顺序结构,选择结构,循环结构。
3,int k = 20;为什么while(k = 1){};是死循环?
首先看这个例子:
int x, y, k;
k = (x=1,y=2); //前面有讲过,逗号表达式的值为最后一个表达式的值。
printf("k = %d",k); //打印结果是k = 2,所以表达式 y=2的值就是2。
所以,题目中while后面括号里面的表达式是赋值,赋值以后整个表达式的值就是1,while(1)才是真身。
4,int n = 5,a[n] = {1,2,3,4,5};这样是不可以的,但是:
int i,a[5] = {1,2,3,4,5};
for(i = 0;i<5;i++)
{
printf("a[%d] = %d",i,a[i])
}
//这样是可以的。
5,若有定义:int a[3][4],
则 (*(a+1)[1])等同于: *(a + 1 + 1) = *(a+2) = a[2][0];
而*(*a[1]+1)等同于*(*(a+1)+1) = a[1][1];
6,static的作用:
1)隐藏:如果定义变量是,前面加了static那么该变量的使用范文仅限于当前文件,不可以再其他文件中使用。如果强行重复定义会出现重载错误。
2)保持变量内容的持久:存储在静态数据区的变 量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和static变量,只不过和全局变量比起来,static可以控制变量的可见范围,说到底static还是用来隐藏的,举个例子:
#include <stdio.h>
int fun(void)
{
static int count = 10;// 事实上此赋值语句从来没有执行过
return count--;
}
int count = 1;
int main(void)
{
printf("global\t\tlocal static\n");
for(; count <= 10; ++count)
printf("%d\t\t%d\n", count, fun());
return 0;
}
//打印结果:
1,10
2,9
3,8
4,7
5,6
4,7
3,8
2,9
1,10
3)static的第三个作用是默认初始化为0:
其实全局变量也具备这一属性, 因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是0x00,某些时候这一特点可以减少程序员的工作量。比如初始化一个稀疏矩阵,我们可以一个一个地把所有元素都置0,然后把不是0的几个元素赋值。如果定义成静态的,就省去了一开始置0的操作。再比如要把一个字符数组当字符串来用,但又觉得每次在字符数组末尾加’\0’太麻烦。如果把字符串定义成静态的,就省去了这个麻烦,因为那里本来就是’\0’。不妨做个小实验验证一下:
int a;
void main()
{
int i;
static char str[10];
printf("integer: %d; string: (begin)%s(end)", a, str);
getchar();
}
//打印结果: 0; (begin)(end) (说明,全局的a默认的初始化值为0,而静态定义的字符数组str默认的元素也都是0,对应字符‘\n’,所以打印的时候毛都不显示。)