C语言零碎

2009年01月16日 269点热度 0人点赞 0条评论

1.函数是C程序的基本单位。
2.一个C程序是从 main 函数开始执行,到 main 函数结束。
3.求负数补码的方式:取绝对值,按位取反,加1。
4.int 型默认为 signed 。
5.整数后加 u ,将其变为 unsigned int 型。
6.整数后加 l 或 L ,将其变为 long int 型。
7.小数必须带小数点,小数点前后不一定有数字。
8.指数形式,e 前必须有数字,e 后必须为整数。
9.实型数据在内存中的存放:float 型占32位,第1位是符号,第2~24位是小数部分,后8位是指数部分。
10.实型数据的舍入误差:float 型只能保证前7位有效,后面的数字都是无意义的。
11.由于C语言字符型数据存储原理,可以将整数赋给字符型变量。但个别C编译系统对字符变量的处理有区别。如Turbo C将字符处理成 signed char 型,因此其取值为-128~127。若不想按有符号处理,可以将字符变量定义为 unsigned char 型。
12.多数机器采用向0取整的方法,即5/3值为1,-5/3值为-1,而非-2。
13.强制类型转换时,得到一个要求类型的中间变量,原来变量并未发生改变。
14.在同一语句中,若对同一个变量有多次++、--运算,应该拆开写,避免歧义性。
15.不同数据类型之间的赋值:低精度赋给高精度,有两种。一是直接放入高精度变量的低位,二是将符号位进行扩展。高精度赋给低精度,直接截取高精度变量的低位放入。
16.scanf("%d%d",&a,&b); 中,可以用一个或多个空格、回车、Tab作为间隔,但逗号不能。
17.运算符 && 和 || 是严格从左到右执行的。
18.运算符 ?: 返回值的类型为二者精度较高的类型。
19.若有 float a,b,c;disc=b*b-4*a*c; 那么不能直接进行如下判断:if ( disc == 0 ),因为实型数据是有误差的。
20.循环中条件默认为真。
21.从终端键盘向计算机输入数据时,是在按下Enter之后才将数据送达内存缓冲区的。
22.一维数组的初始化:第一种 int a[10] ={ 0,1,2,3,4,5,6,7,8,9}; 第二种 int a[10] = {0,1,2,3,4};第三种 int a[ ]={1,2,3,4,5};
22.二维数组的初始化:第一种 int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 第二种 int a [3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; 第三种int a[3][4] = {{1},{5},{9}}; 第四种 int a[ ][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; 或int a[ ][4] = {{0,0,3},{},{0,10}};
23.字符串初始化:char c[ ] = "I am happy";
24.函数定义默认为 int 型。
25.对函数的“定义”和“声明”不是一回事。“定义”是指对函数功能的确立,包括指定函数名,函数值类型、形参及其类型、函数体等,它是一个完整的、独立的函数单位。而“声明”的作用则是把函数的名字、函数类型以及形参的类型、个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查。
26.传递数组的办法是,传递指针。
27.利用全局变量,可以从一个子函数中获得多个返回值。但是过多的全局变量会降低程序的结构性。
28.变量的“定义”和“声明”也是不同的。在声明部分出现的变量有两种情况:一种是需要建立存储空间的(如:int a;),另一种是不需要建立存储空间的(如:extern a;)。前者称为“定义性声明”,或称定义。后者称为“引用性声明”。广义的说,声明包括定义,但并非所有的声明都是定义。一般为叙述方便,把建立存储空间的声明称为定义,而把不需要建立存储空间的声明称为声明。
29.用static来声明一个变量的作用有二:(1)对局部变量用 static 声明,则为该变量分配的空间在整个程序执行期间始终存在。(2)全局变量用 static 声明,则该变量的作用域只限于本文件模块。
30.不要将一个整型量(或任何其他非地址类型的数据)赋给一个指针变量。如:pointer_1=100; 是不合法的。
31.如果想在子函数中改变实参的值,应该使用指针。
32.[ ] 实际上是变值运算符,将 a[i] 处理成 *(a+i) ,再取内容。因此,使用指针法能使目标程序质量高(占内存少,运行速度快)。
33.二维数组 a[3][4] = {{2000,2002,2004,2006},{2008,2010,2012,2014},{2016,2018,2020,2022}}; 中,为什么 a+1 和 *(a+1) 的值都是2008呢?或者说,“a+1的值和a+1的地址怎么都是一样的呢?”首先说明,a+1 是地址(指向第一行首地址),而 *(a+1) 并不是“a+1单元的内容(值)”,因为 a+1 并不是一个实际变量,也就谈不上它的内容。*(a+1) 就是 a[1] ,而 a[1] 是一维数组名,所以也是地址。或者可以这样理解,在行指针前加上 * ,就使它变成了列指针。
34.如果想要清除屏幕内容,可以#include <stdlib.h>后,在程序中使用system("cls");来清除。

木火唳唳

一只普通的程序猿

文章评论