C阶段遗漏二

“慈母手中线,游子身上衣。临行密密缝,意恐迟迟归。”
其实这首诗放在这里是不太合适的,我其实只是想表达目前紧张的现状。我就是那个游子,只是出门前的破衣服得由我自己来缝。这件破衣服指的是我过去所学。之所以这么说,并不是因为没好好学,只是学的越多,越觉得不够,就越想学。

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

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’,所以打印的时候毛都不显示。) 
最后对static的三条作用做一句话总结。首先static的最主要功能是隐藏,其次因为static变量存放在静态存储区,所以它具备持久性和默认值0

7,在C语言中,要求运算数必须是整型或字符型的运算符是:求余运算符“%”(老子就是专治拖泥带水的)

8,在C语言中,函数的定义不可以嵌套,但函数的调用可以嵌套。

9,printf(“%-m.nf”,f),m代表输出的数所占的列数,n小数点后的位数,“-”代表左对齐,如果长度小于m,右补空格。

10,printf(“%-m.ns”,str),与上面的区别是,这里的n表示的是只取字符串左端的n个字符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值