第三次笔试(基础知识)
这次考试很多题考的很基础的东西,在这里记录一下
1、32位系统中各个类型的字节数
- char----------------1字节
- short---------------2字节(unsigned 同)
- int------------------4字节(unsigned 同)
- long----------------4字节
- long long---------8字节
- float----------------4字节
- double-------------8字节
- *(指针)---------4字节
2、64位系统中各个类型的字节数
- char----------------1字节
- short---------------2字节(unsigned 同)
- int------------------4字节(unsigned 同)
- long----------------8字节
- long long---------8字节
- float----------------4字节
- double-------------8字节
- *(指针)---------8字节
综上除了指针变量*和long 随系统位数变化以外,其他不变
3.struct的内存对齐
1、数据成员对齐规则
结构(struct)(或联合(union))的数据成员
第一个数据成员放在offset为0的地方
以后每个数据成员存储的起始位置要从该成员大小(或该成员的子成员大小)(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始
(比如int在32位机为4字节,则要从4的整数倍地址开始存储)
2、结构体作为成员
如果一个结构里有某些结构体成员
则结构体成员要从其内部最大元素大小的整数倍地址开始存储.(struct a里存有struct b,b里有char,int ,double等元素,那b应该从8的整数倍开始存储.)
3、预处理#pragma pack(a)
起始位置为a的整数倍,当a =1时,无对齐
4、总结
一切对齐的操作只是要求成员存储的起始位置offset,是某个数(本身大小或 a的值)的整数倍,其他的部分补充而已。(一切看offset)
4.排序方式有很多种
大致分5类:【插入类】【交换类】【选择类】【归并类】【基数类】
【插入类】
直接插入,折半插入,希尔排序
【交换类】
起泡排序,快速排序
【选择类】
简单选择排序,堆排序
【归并类】
二路归并排序
【基数类】
基数排序
5.sizeof 对数组名称的操作
sizeof(数组名),sizeof(指针),sizeof(动态数组指针)
函数测试 如下
1 #include <iostream> 2 using namespace std; 3 void fun(int* array,int sz){ 4 cout << sizeof(array)<<endl; 5 } 6 int main(){ 7 int a[10]; 8 int* b = new int[10]; 9 cout << sizeof(a)<<endl; 10 cout << sizeof(b)<<endl; 11 fun(a,10); 12 }
执行结果为40,4,4可知
sizeof(数组名) = sizeof(数组类)* (数组元素数量);
sizeof(动态数组) = sizeof(指针);
当数组名通过函数参数传递时,被退化成指针了