Chapter 1 概述
1、生成.exe文件的4步
2、C语言区分大小写:
关键字一般小写,宏定义一般要大写(不成文规定,尽管小写也可以)
其他大小写都可以,但是区分大小写
3、调试(必须精通调试)
4、左值:既可以放在等号左边也可以放在等号右边的值
右值:未必可以放在等号左边
5、变量命名法:不同的公司不同的程序员遵循的命名法都不尽相同。有驼峰命名法(studentNameId)等
Chapter 2 数据类型总述
1、变量先定义后使用的优点:分配内存空间、防止以后使用错误
void a = 10;空类型编译器编译不了
2、定义和声明的区别:
定义:编译器为其分配内存空间
声明:编译器不为其分配内存空间
3、常量:
整型常量:12、0、-3
实型常量:12.3、-11.5
字符型常量:'a'
、'6'
常量表达式:'s'+6、13+12.3
4、被const修饰的变量
在C语言中被const修饰的变量是只读变量,并不是常量
在C++中被const修饰的变量是常量
例如:
C程序
const int n = 10;
int array[n];
编译不能通过、因为n是只读变量不是常量。而该程序在C++里可以通过,说明C++里const修饰的变量是常量
5、在VC++6.0中:float—>4 Bytes、double—>8 Bytes、short—>2 Bytes、int—>4 Bytes、long—>4 Bytes
6、各种数据在computer中都是以补码的形式存放。注意:数据在内存中存放的都是以补码的形式、但是取出来的时候有不同的读法。就是数据还是补码形式,但以%d和以%u格式读的时候读出的数据可能不同。
例如:
int i = -1;
int j = 3;
i在内存中存放的是补码形式:11111111
%d—>-1
以下面的格式输出时将忽略符号位、即把符号位也作为数据位
%u—>2^32-1(整型占4 Bytes)
%o—>
%x—>
7、常用二进制数值大小
7个1—>2^7-1 (127)
8个1—>2^8-1 (255)
15个1—>2^15-1 (32767)
16个1—>2^16-1 (65535)
32个1—>2^32-1
8、1个tab键占8个字符
9、编译器默认整型为:int、浮点型为:double
所有的浮点型用%d输出都是0
所有的整型用%f输出都是随机数
Chapter 3 整型
1、整型得表示方法:二、八、十、十六、进制4种
2、C语言本身并不提供每个类型占多少字节,具体由编译器自己决定。规则是:short不大于int、int不大于long。
3、i++:先用再加。(1、遇到分号。2、遇到逗号表达式。3、作为条件表达式得一部分。执行++。其余情况不执行++)。。++i先加再用。
4、运算符:要考虑
优先级、结合方向、操作目数
5、int i = 2;
printf("%d,%d\n",++i,i);
结果是:3,2
解析:传参顺序为自右向左。先计算i,再计算++i。即先把i的值压入栈,再执行++, i = 3。再把i的值压入栈。最后一次出栈。所以结果为:3,2
6、程序代码
int i = 5;
printf("%d\n",++i+++i+++i);
结果为:22
解析:编译器采用贪心算法。因为只有一个参数,所以不存在先传哪个参数的争议
++i+++i+++i可以写成(++i)+(++i)+(++i)
(1)先执行最左边的++i, i—>6
(2)再执行最中间的++i, i—>7
(3)然后再执行前面两个++i相加。但是在前面两个++i相加的时候编译器采用了贪心算法:即把两个++i中的i都当作7,所以结果为14
(4)执行最右边的++i, i—>8
(5)最后结果14+8 = 22
7、sizeof()是一个关键字,并不是函数,用来求字节数。不要误当作函数
8、3/5*5和3*5/5哪个好。前面的好。因为先除再乘可防止数据过大溢出
9、3%-5 = 3 ***-3%-5 = -3、用%求余时,结果的符号只和被除数有关
Chapter 4 浮点型
1、float的有效位数为7位、小数点后可以有6位小数(不过小数的精度不一定准确)。double的有效位数是16位。%.2f,指定可以只有2位小数。%.3s指定只有3个字符。
2、小数和0的比较:
不可以直接比较。float f = 0.00.;
应该通过指定一个范围来比较
#define CIS 1e-6
if (f < CIS)
{
printf("f的值是0\n");
}
else if (f > CIS)
{
printf("f的值不是0\n");
}
并不可以用 if (f == 0)来比较
Chapter 5 字符型
1、字符型数据在内存中存储的也是整数(通过ASCII码转换),所以字符型数据可以和整形数据通用
2、字符型数据也是有正负的,范围-128~127。计算机用7位表示字符型数据,而不是8位,因为ASCII码中规定,最高位为0,剩下的7位刚好可以组成128个ASCII字符,所以ASCII是用7位表示的。至于128~255之间的ASCII码是一些公司内部自己使用的,不是通用的。
3、记住一些常见的ASCII码
13—————回车
32—————space空格
48—————‘0’字符0
65—————‘A’
97—————‘a’
0—————-‘\0’字符串结束标志(即NULL)
4、字符型常用”单引号,注意’0’和0不一样。再表示’–”–\这三个字符的时候要加上转义字符标志\
\”——–>”
\’——–>’
\——->\
5、表达式也是有值的。例如a = 123这个表达式的值就是123
6、整型和实型可以相互赋值,float—->int 去掉小数部分
7、在计算机中有大端存储和小端存储
大端存储:低地址存高字节
小端存储:低地址存低字节
8、逗号表达式的值为最后一个表达式的值
作用:求出每一个分量的值
例如:for (i = 0, j = 0; i < 10; i++, j++)
9、char ch = 'abcd'
C的值为多少呢????先不告诉你们
注意:上式中c为字符类型、而’abcd’系统把它当成整型来存储,即int
在VC++6.0中,采用的是小端存储
所以:ch永远和int类型的低字节相对应
而’abcd’中,a是最高字节,然后依次减小。d为最低字节
ch
**** **** char类型
**** **** **** **** **** **** **** **** int 类型
a b c d
高位截断,把a,b,c去了,所以最后ch = d。
10、在内存中,变量地址的分配是从大到小分配的
即先定义的变量地址大,后定义的变量地址小
定义数组时数组元素的地址是从小到大分配的
例如:
int a = 10;
int array[10];
int b = 5;
地址大小:
a的地址最大
array[9]
*
*
array[0]
b的地址最小
11、\t不是从当前位置跳格,而是按已经规定好的格数跳
12、编译器用1个空格代替注释
13、0X5BD是一个十六进制数,D是低位,5是高位
在计算机中00101011、始终从左到右为:低—->高