C基础知识进阶(上)

C语言基础知识

Chapter 1 概述
1、生成.exe文件的4步

  1. 预处理 ——-> .i 文件
  2. 编译———-> .s 文件
  3. 汇编———-> .o文件
  4. link———–> .exe 文件

2、C语言区分大小写:
关键字一般小写,宏定义一般要大写(不成文规定,尽管小写也可以)
其他大小写都可以,但是区分大小写

3、调试(必须精通调试)

  1. 按F10或按Fn+F10进入调试状态, stop Bulid停止编译(通常在编译比较大的程序是该项才会可以被操作,因为编译小的程序时所需要编译的时间很短,所以一般该项是灰色的,即操作不了)
  2. step into 和step over都是一条指令一条指令的执行,但是区别在于step into 会进入函数体,执行函数里面的语句而step over 不会进入函数体,即不一条一条的执行函数体里的指令。
  3. 学会看汇编代码、栈、寄存器等
  4. ->指向的是将要执行的语句(即还没有执行)

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、始终从左到右为:低—->高

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值