c语言笔记

调试:

f10与f11的区别:

在普通语句中没有区别,在函数调用上有区别。

在函数调用中,f10直接出结果,f11可以进函数内部进行查看。

也可以把断点直接打入函数内部,然后进行调试。

编译错误:

1.语法错误,可以通过提示找到对应的错误

2.链接错误,用了未定义的函数就会有,报错为(LNK***)

3.运行错误(可能会通过编译也可能不会)。

栈区内存的使用习惯:

1.先使用高地址然后再用低地址。

2.数组随着下标的增长,地址由低到高变化。

3.在早期vs x86的环境下 数组的越界访问可能会导致程序进入死循环。

类型:

Int 的默认类型为signed int ,除此之外还有unsigned int。第一个是有符号整型,第二个是无符号整型。

float,double与int一致。

char有三种类型,char ,unsigned char,signed char。char不一定是signed char,它在c语言中没有定义,取决于编译器。

unsigned char 的取值范围在:0~255;

signed char的取值范围在:-128~127;

unsigned short 的取值范围在:0~65535;

signed short的取值范围在:-32768~32767;

库函数的返回类型为size.t时就代表其类型为unsigned int ;

无符号整数与无符号整数进行加减操作时结果也是无符号整数。

在c语言中有这样一套转换规则:

int,unsigned int, long int,unsigned long int,float,double,long double.

从左向右,遇到更靠右的类型时,就会发生相对的转换。

如int 类型+unsigned int类型=unsigned int 类型。

构造类型:  

1.自定义类型:数组,当数组类型或者所包含的元素数量改变时就是创建了新的类型。

2.struct 结构体类型。

3.enum 枚举类型。

4.union 联合类型。

浮点型在内存中存储:

根据国际标准:任意一个二进制浮点数可以表示为以下形式:

(-1)^S  *M *2^E

其中:S表示符号位,M表示有效数字,取值范围在(2>M>=1),E表示指数位。

规定E为无符号整数,但我们在使用的时候会发现当取无符号整数时没法表示小数,比如说0.5。

为正数S=0,M=1,E=-1。

所以为了表示0.5,其中引入了中间值的概念,当转换类型为float类型时,中间值为127,转换类型为double类型时,中间值为1023。

引入之后,0.5的E就可以表示为-1+127=126.126再转化为二进制存储到空间中。

对于32位浮点数来说,最高位的符号位S,然后是8位的指数E,最后是23位M为有效数字。

类似下图:

对于64位来说,精度更大即,E的有效位数为11位,M的有效数为52。

浮点型在内存中取出:

对于取出要对E进行分类讨论:

1.E不全为0或E不全为1:

例如:float 9.0->1001->1.001*2^3;

S=0;E=3;M=1.001;

M只要小数部分。

 E的值为3+127=130再转化为二进制为:10000010

9.0在内存中就为 0(S)10000010(E)001(M)(再补20个零)(因为一共要32位)

2.E全为0(表示超小数):

例如:float 0.5->0.1*2^(-1)

S=0;E=-1;M=0.1;

M只要小数部分。

E的值为1-127=-126。就表示极小值。

0.5在内存中就是0(S)00000000(E)(再补22个零)1(M)

选自ieee 754,*表示符号位可以是0也可以是1,最后是实际值

3.E全为1(表示超大数):

其他:

在函数中数组传参时,因为传递的是首地址,所以在调试中只能看到第一个元素,要看其他元素的话就要(首地址,要看元素的数量)。

assert(断言)包含于头文件assert.h

使用方法:

assert((进行判断))

结果为真时没有作用,结果为假时直接报错。

const 类似于把变量变成常量,不可修改。

const修饰指针的两种方法:

1.放在*左边:const int * p 表示p指向的对象不能通过p改变,但可以通过其他方式改变。

2.放中间:int  const * p 表示p指向的对象可以改变,但p不可以改变。

如果写成 const int const *p时这样就都无法改变。

strcpy函数返回的是目标空间的起始地址。

内存中存补码的原因:

使用补码,可以将符号位和数值域统一处理。

同时加法与减法也可以统一处理(cpu只有加法器)

此外,补码与源码直接相互转换,其运算结果也是相同的,不需要额外的硬件电路。

大小端:从原则上来讲,内存的存放是随便的,只要取出和存放的方法一致即可。

例如:0x 11 22 33 44

大端字节序存储:11 22 33 44

小端字节序存储:44 33 22 11

使用大端还是小端是取决于硬件的。

  • 13
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值