调试:
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
使用大端还是小端是取决于硬件的。