当前位置: 首页 > news >正文

镇江做网站在线制作公司网站

镇江做网站,在线制作公司网站,网站建设岗位的任职资格,wordpress 空间商目录 回调函数qsort使用举例qsort函数的模拟实现sizeof和strlen的对比sizeofstrlensizeof和strlen的对比一道关于sizeof的题 回调函数 回调函数就是一个通过函数指针调用的函数 如果你把函数的指针#xff08;地址#xff09;作为参数传递给另一个函数#xff0c;当这个指… 目录 回调函数qsort使用举例qsort函数的模拟实现sizeof和strlen的对比sizeofstrlensizeof和strlen的对比一道关于sizeof的题 回调函数 回调函数就是一个通过函数指针调用的函数 如果你把函数的指针地址作为参数传递给另一个函数当这个指针被用来调用其所指向的函数 时被调用的函数就是回调函数。回调函数不是由该函数的实现方直接调用而是在特定的事件或条 件发生时由另外的一方调用的用于对该事件或条件进行响应 举个例子: //使⽤回调函数改造前 #include stdio.h int add(int a, int b) { return a b; } int sub(int a, int b) { return a - b; } int mul(int a, int b) { return a * b } int div(int a, int b) { return a / b; } int main() { int x, y; int input 1; int ret 0; do { printf(******************) printf( 1:add,2:sub\n) printf( 3:mul,4:div\n) printf(******************) printf(请选择); scanf(%d, input); switch (input) { case 1: printf(输⼊操作数); scanf(%d %d, x, y) ret add(x, y); printf(ret %d\n, ret) break; case 2: printf(输⼊操作数); scanf(%d %d, x, y) ret sub(x, y); printf(ret %d\n, r break; case 3: printf(输⼊操作数); scanf(%d %d, x, y) ret mul(x, y); printf(ret %d\n, ret) break; case 4: printf(输⼊操作数); scanf(%d %d, x, y) ret div(x, y); printf(ret %d\n, ret) break; case 0: printf(退出程序\n); break; default: printf(选择错误\n); break; } } while (input); return 0; }//使⽤回到函数改造后 #include stdio.h int add(int a, int b) { return a b; } int sub(int a, int b) { return a - b; } int mul(int a, int b) { return a * b; } int div(int a, int b) { return a / b; } void calc(int(*pf)(int, int)) { int ret 0; int x, y; printf(输⼊操作数); scanf(%d %d, x, y); ret pf(x, y); printf(ret %d\n, ret); } int main() { int input 1; do { printf(******************) printf( 1:add,2:sub\n) printf( 3:mul,4:div\n) printf(******************) printf(请选择); scanf(%d, input); switch (input) { case 1: calc(add); break; case 2: calc(sub); break; case 3: calc(mul); break; case 4: calc(div); break; case 0: printf(退出程序\n); break; default: printf(选择错误\n); break; } } while (input); return 0; }qsort使用举例 #include stdio.h //qosrt函数的使⽤者得实现⼀个⽐较函数 int int_cmp(const void * p1, const void * p2) /*void*p为任意类型的指针, 因为创造这个函数的人不知道使用者会传入什么类型的指针, 因此用viod类型的指针就可以解决这个问题*/ { return (*( int *)p1 - *(int *) p2); /*返回值是用两个指针变量进行相减,其中int*为强制类型转换,将p1和p2强制转换为整形类型的指针,再通过解引用判断大小*/ } int main() { int arr[] { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 }; int i 0; qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof (int), int_cmp); /*qsort函数需要数组的首元素地址,还有多少个元素,一个数组元素有多少字节,比较大小的函数*/ /*因为需要比较两元素的大小,然后进行排序,所以需要一个比较大小的元素*/ for (i 0; i sizeof(arr) / sizeof(arr[0]); i) { printf( %d , arr[i]); } printf(\n); return 0; }qsort函数的模拟实现 使用回调函数模拟实现qsort采用冒泡的方式 #include stdio.h //比较大小的函数 int int_cmp(const void* p1, const void* p2) {return (*(int*)p1 - *(int*)p2); } //交换的函数 void _swap(void* p1, void* p2, int size) {int i 0;for (i 0; i size; i){char tmp *((char*)p1 i);*((char*)p1 i) *((char*)p2 i);*((char*)p2 i) tmp;//*((char*)p1 i)就是数组的元素一点i个字节,因为是强制类型转换为char*类型的指针,又由于char*类型的指针大小为一个字节,所以移动i个字节就是移动i个数组元素} } //模拟实现的qsort函数 void bubble(void* base, int count, int size, int(*cmp)(void*, void*)) {int i 0;int j 0;for (i 0; i count - 1; i){for (j 0; j count - i - 1; j){if (cmp((char*)base j * size, (char*)base (j 1) * size) 0)//判断指针大小是否大于0,如果大于0就会交换{_swap((char*)base j * size, (char*)base (j 1) * size, size);}}} }int main() {int arr[] { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };//char *arr[] {aaaa,dddd,cccc,bbbb};int i 0;bubble(arr, sizeof(arr) / sizeof(arr[0]), sizeof(int), int_cmp);for (i 0; i sizeof(arr) / sizeof(arr[0]); i){printf(%d , arr[i]);}printf(\n);return 0; } sizeof和strlen的对比 sizeof 在学习操作符的时候我们学习了 sizeof sizeof 计算变量所占内存内存空间大小的单位是字节如果操作数是类型的话计算的是使用类型创建的变量所占内存空间的大小。 sizeof 只关注占用内存空间的大小不在乎内存中存放什么数据比如: #inculde stdio.h int main() { int a 10; printf(%d\n, sizeof(a)); printf(%d\n, sizeof a); printf(%d\n, sizeof(int)); return 0; }strlen strlen 是C语言库函数功能是求字符串长度。函数原型如下 size_t strlen ( const char * str ); 这里随便说一下size_t是无符号整形类型统计的是从 strlen 函数的参数 str 中这个地址开始向后 \0 之前字符串中字符的个数。 strlen 函数会一直向后找 \0 字符直到找到为止所以可能存在越界查找(找不到\0) #include stdio.h int main() { char arr1[3] {a, b, c}; char arr2[] abc; printf(%d\n, strlen(arr1)); /*strlen(arr1)就是越界查找的典型例子 因为数组里都是字符,并没找到\0 因此就会越界查找,甚至找不到*/ printf(%d\n, strlen(arr2)); /*每个字符串末尾都有\0, 因此strlen的大小就是abc中有多少个字符*/ printf(%d\n, sizeof(arr1)); printf(%d\n, sizeof(arr1)); return 0; }sizeof和strlen的对比 sizeof sizeof是操作符sizeof计算操作数所占内 存的大小单位是字节不关注内存中存放什么数 据 strlen strlen是库函数使用需要包含头头件 string.hsrtlen是求字符串长度的统计的是 \0 之前字符的隔个数关注内存中是否有 \0 如果没有 \0 就会持续往后找可能 会越界 一道关于sizeof的题 #includestdop.h int main() { short s10; in**加粗样式**t i2; int nsizeof(si4); printf(%d\n,s); printf(%d\n,n); return 0; }s作为短整型是占用两个字节,而i是整形则占4个字节,在int nsizeof(si4)中,很多人会认为i4会赋值给s,但是我们要注意二者的类型是不同的,一个是短整型,另一个是整形,因此会发生截断,由于s始终为短整形,因此sizeof(s)就是s的内存大小,就是2 对于n为什么是等于10,其实sizeof的操作数如果是一个表达式,那么表达式是不会参与计算的,因为我们已经知道了s是短整型,那么是没有必要再去计算的,所以s赋的值仍然是10. 表达式有两种属性 1:类型属性 2:值属性 所以我们以后只需要判断sizeof中的表达式类型就可以知道大小
http://www.hkea.cn/news/14473016/

相关文章:

  • 设计师网站有哪些销售定制家具想学网络营销怎么学
  • 软件开发和网站建设一样吗网络营销的主要特点
  • 网站开发要计入无形资产吗一个网站的制作特点
  • 手机数据线东莞网站建设技术支持做外销网站服务器好吗
  • 网站哪些页面会做静态化怎么联系网站管理员
  • 怎样在门户网站做网络推广深圳注册公司需要什么条件
  • 合肥专业网站建设公司公司申请域名
  • 网站被降权表现婚庆网站制作
  • 西安网站建设公司云网潍坊手机模板建站
  • 校园网站建设报告建筑网上接活平台
  • 公司网页制作选择软件seo营销培训
  • 小语种网站建设及推广网站建设公司的前景
  • 西安易扬众和网站建设网络公司logo
  • 河南郑州网站设计公司哪个网站做高中的题好
  • 网站建设方为客户提供使用说明书学做网站论坛vip账户
  • 江苏有哪些做网站建设的公司wordpress表单文件上传
  • .net网站做优化广州深圳
  • 财经资讯网站该怎么做推广网站结构分类
  • 做网站要的软件商务网站建设策划书的格式
  • 越秀五屏网站建设通州区网站快速排名方案
  • 企业网站如何优化排名网站优化 价格查询
  • 建立个人网站的步骤有哪些企业网络采购平台
  • 网站品牌词优化怎么做Python能开发WordPress
  • 建设一个购物网站需要什么手机建筑设计app
  • 饥荒网站这么做福州seo建站
  • 长沙建长沙建网站公司网页模板psd
  • 东莞网站建设的方案常用的北京文化馆设计公司
  • 宜都市网站建设上海网站推广有哪些
  • 高端网站建设公司联系电话潍坊做网页的公司
  • 中国网站建设集团模仿大型门户网站做ppt