
一百数据存储00000000——011111111,0到12710000000——111111111,-128到-1浮点数float ,double ,long double瞎写整型和浮点型对内存单元数据的解析方式不同同样的二进制代码整型使用自己的方式浮点型使用自己的方式ieee754来解析。而强制类型转换转换的不是数据本身而是解析该内存单元的方式进行转换。小数再内存中会有精度丢失第一0二课浮点数存储IEEE7541 位8位23位第一位符号位S正0负1中间八位E:指数位。为无符号整数表示小数点左右移动的位数127或者1023。后23位M:小数位默认第一位为1省略不写增大一位小数存储位。E不为全0也不是全1则用E-127为真实值E为全0浮点数的指数等于1-127或1-1023E为全1M为全0表示无穷大第一0四课作业栈溢出为运行时粗错误ctrlF5开始执行不调试F10逐步调试 F11:逐语句调试 F9设置断点错误代码void reverse(int arr[], int size) {int left 0;int right size - 1;while (left right) {while (left right arr[left] % 2 1) left;while (left right arr[right] % 2 0) right--;if (left right) {int tmp arr[left];arr[left] arr[right];arr[right] tmp;left;right--;}}}int main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };int size (int)sizeof(arr) / sizeof(arr[0]);void reverse(int arr[], int size);for (int i 0; i size; i) {printf(%d, arr[i]);}return 0;}合并两个有序数组int main() {int n 0;int m 0;scanf(%d %d, n, m);int arr1[n];int arr2[m];for (int i 0; i n; i) {scanf(%d, arr[i]);}for (int j 0; j m; j) {scanf(%d, arr2[j]);}int h 0;int k 0;while (h n k m) {if (arr1[h] arr2[k]) {pirntf(%d, arr1[h]);h;}else(arr1[h] arr2[k]) {printf(%d, arr2[k]);j;}if(hn){for (; h n; h) {printf(%d, arr1[h]);}esle(km){for (; k m; k) {printf(%d, arr2[k]);}return 0;}第一0五课指针进阶字符指针char*C/C会把常量字符串存储到单独的一个内存区域当几个指针指向同一个字符串的时候他们实际会指向同一块内尺寸但是用相同的常量字符区初始化不同的数组的时候会开辟出不同的内存块。指针数组用来存放指针的数组。int arr[10];//整型数组char ch[5];//字符数组int *arr[6];//存放整型指针的数组char* arr3[5];//存放字符指针的数组int * p1[10]:p1是指针数组int (*p2)[10]:p2是数组指针p2可以指向一个数组该数组有10个元素每个元素是int类型。1.数组名通常表示都是首元素地址但是有例外。1.sizeof(数组名这里的数组名表示整个数组计算的是整个数组的大小。2.数组名这里表示的是整个数组所以数组名取出的是整个数组的地址。二维数组的首元素是他的第一行printf(%d,*(*(pi)j);表示第i行第j列的元素int (*p)[5]:p的类型是int (*)[5];p是指向一个整型数组的数组5个元素int[5]p1-跳过一个5个int元素的的数组int arr[10];int (*p)[10]arr;arr---int(*)[10]arr---int*第一0九课指针进阶int arr[5]; arr是整型数组int *parr1[10]; parr1整型指针数组int (*parr2)[10]; parr2数组指针int (*parr3[10])[5]; parr3存放数组指针的数组数组参数和指针参数形参的二维数组行可以省略列不能省略。函数指针指向函数的指针对于函数来说函数名和函数名都是函数的地址。Add和Add都是函数地址int ret(*pf)(2,3);int retAdd(2,3);第一一0课函数指针int test(const char* str){return 0;}int (*pf)(const char*)test;int main(){ (*(void(*)() )0)();}为函数调用以上代码为一次函数调用调用的是0作为地址处的函数。1.把0强制类型转换为无参返回类型是void的函数地址2.调用0地址出的这个函数函数嵌套外层函数调用内存函数使用函数指针来接受所调用函数 的地址。calc(Add); calc(Sub);void calc (int (*pf)(int ,int)){int x0;int y0;int ret0;scanf(%d %d,x,y);retpf(x,y)printf(%d,ret);}第一一一课指针进阶void menu{printf(*************************);printf(****1.add 2.sub*******);printf(****3.mul 4.div*******);printf(****0.exit**************);printf(*************************);int Add(int x,int y){return xy;}int Sub(int x,int y){return x-y;}int Mul(int x,int y){return x*y;}int Div(int x,int y){return x/y;}int main()int input0;int x0;int y0;int ret0;int *pfarr[5])(int ,int){0,Add,Sub,Mul,Div};do{menu();printf(请选择);scanf(%d,input);if(input0){printf(退出计算器);}else if(input1input4){printf(请输入两个数);scanf(%d %d,x,y);retpfarr[input](x,y);printf(%d\n,ret);}do{menu();printf(请选择”scanf(%d,input);switch(input){case1:printf(请输入两个操作数);scanf(%d %d,x,y);retAdd(x,y);printf(%d\n,ret);break;case 2:........}}指向函数指针数组的指针int(*(*pfarr[5])(int ,int)pfarr;回调函数通过函数指针调用的函数函数的地址作为参数传递给了另一个函数当这个指针被用来调用其所指向的函数时我们称为回调函数。回调函数不是由该函数的实现方式直接调用而是再特定的事件或者条件发生时由另外一方调用的用于对该事件或者条件进行响应。对数组进行冒泡排序void bubblesort(int arr[], int size) {//一共执行膛数for (int i 0; i size - 1; i) {//每一趟的比较次数for (int j 0; j size - 1 - i; j) {//如果前一个数大于后一个数则交换位置if (arr[j] arr[j 1]) {int tmp arr[j];arr[j] arr[j1];arr[j1] tmp;}}}}//定义主函数int main() {//创建一个数组int arr[] { 1,3,67,5,0,4,2,6,7,8,11,23 ,34,15};//获取数组长度的int size sizeof(arr) / sizeof(arr[0]);//调用冒泡排序bubblesort(arr, size);//打印排序后的数组for (int i 0; i size; i) {printf(%d , arr[i]);}return 0;}//void*是无具体类型的指针可以接受任意类型的地址//void*是无具体类型的指针所以不能解引用操作也不能-整数第114课笔试详解数组名大部分情况下表示数组首元素地址。第150课比特方向选择