c语言的笔记

来源:转载

下面把我这半年来记的一些C语言的笔记贴出来。

1  C语言中函数参数传递是按照“值传递”进行的,即单向传递。

2  函数原型:函数类型 函数名(参数类型,参数类型……),可以不必加参数名,因为操作系统不检查参数名。

3  数组作为实参传递,型参若也是数组声明,可以第一维不指定数组大小,此时这个数组已经退化为一个指针,因此数组长度需要在参数当中接收。局部引用型参数组名的时候,其实它已经不是数组而只是一个指针。

4  函数定义不可以嵌套

5  型参中的数组定义,可以不指定一维数组的大小,指定了也不起作用。C编译器对型参数组大小不做检查,只是将实参数组首地址传递给了型参。故,两个数组名的指针一致。两个数组共同占用一段内存单元。多为数组名作参数可以忽略一维数组的大小,但是不能忽略二维及高维的大小声明,C编译器不检查第一维的大小。

6  动态存储方式与静态存储方式:静态存储指程序运行期间分配固定的存储空间的方式,而动态存储是根据需要动态分配管理的方式。全局变量存储在静态存储区,而静态局部变量亦是如此。使用static声明的全局变量表示其作用域只是本文件当中,而不可以被其它文件使用 “extern”声明后 引用,同样的static型函数。

7  只有局部变量和型参可以作为寄存器变量。别问为什么,理由自己去想!

8  使用“extern”声明外部变量,编译时将外部变量分配在静态存储区。

9  使用“extern”声明一个外部变量,可以是本文件中的,此时适用的情况就是“适用处位于声明处之前”。或者是在其它文件中进行查找:extern int a; 或者 extern a; 查找先是在本文件当中进行的,然后是外部文件。

10 预处理命令,它们并非C语言的一部分。

11 a[i] 与 *(a+i)效率相同而内部处理是将 a[i]转化为 *(a+i);

12 java当中构造方法不能被子类继承,若子类需要调用父类带参构造方法需要使用 super()方法。正常编译器会自动调用父类的无参构造方法。显示的通过super()父类成员。

13 java当中构造方法的第一条语句可以为this调用,即通过适用this加参数,调用其它的构造方法。

14 C语言的数据类型大体可以分为四种:基本类型(整型、字符型、实型、枚举类型),构造类型(数组、结构体、共用体),指针类型,空类型。

15 在Turbo C中一个int型变量最大允许值32767,如果将其加1,则会溢出,变为-32768。

16 如果一个整常数后面加一个字母,u或U,则认为是unsigned int型。如12345u,在计算机中按照unsigned int 存储。存储单元中最高位不作为符号位,而用来存储数据。如果数字为123L,表示long int。

17 float 4个字节,有效数字6-7位。 double 8个字节,有效数字位数15-16位。

18 实型数据的舍入误差。%f为输出一个实数的格式符。看下面的程序:

main()
{
    float a, b;
    a=123456.789e5;
    b=2+20;
    printf("%f", b);
}

实型变量只能保证7位有效数字,后面的数字是无意义的,并不准确。此时输出a,b都为12345678848.000000 。类似的如果输出1.0/3*3,那么看到的输出并不等于1

实型常量,C编译系统作为双精度处理。

19 如果i=3,printf(“%d”, -i++),则先取i的后置自增,返回结果3,之后取负,输出虽然是-3,此时i为4.

20 变量“先定义后使用”原则的好处:确保程序变量名使用得正确,类型确定,在编译时就能为其分配相应的存储单元;有利于编译时进行运算的合法性检查。

21 如果 float a = 4.5; 那么 (int)a/1.5 结果为2.66……而不是3,这说明了运算的顺序先进行类型的转化在进行除运算。



分享给朋友:
您可能感兴趣的文章:
随机阅读: