| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3967 人关注过本帖
标题:数组错误。
只看楼主 加入收藏
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:3 
以下是引用叶纤在2020-3-25 13:12:57的发言:

请问sort是专门的排序函数吗
cmp是什么意思

排序结果有升序 和 降序
sort是一个比较排序
决定升序降序是通过比较2个元素决定的
cmp是比较2个元素用的

提取主干 cmp用于决定是升序还是降序

https://zh.
2020-03-25 20:08
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:3 
cmp称为回调函数。
主程序调用sort,sort因为动态的需求又转身调用主程序的某个函数,这个函数就是回调函数。
为什么需要回调函数:因为很多需求是已经编译好的满足通用需求的库函数,这些代码是码农无法改变的,但库函数有时确实需要满足主程序个性要求的,于是库函数中提供一个函数指针参数,通过这个指针调用主程序的函数达到个性需求。具体到sort函数,就是通过cmp的返回值决定两两比较的数是否需要交换,表现到结果上就是排序数据是从大到小还是从小到大。

能编个毛线衣吗?
2020-03-25 21:12
xianfajushi
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:527
专家分:690
注 册:2007-9-8
收藏
得分:3 
初学者可原谅的错误,简单的题目写,有些步骤是不需要的,使用指针无需返回,有返回无需指针.
从小到大进行连续编号,要求不能改变数组A中元素的顺序。如A=(78,42,-34,94,25)则输出为(4,3,1,5,2)=94 -34 78 25 42符合题目要求?
难道不是这样:-34 25 42 78 94=3 5 2 1 4 ?

[此贴子已经被作者于2020-3-26 09:57编辑过]

2020-03-26 09:56
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
回复 13楼 xianfajushi
从接口设计的角度
返回指针和使用指针做参数没什么冲突
库函数许多接口就是这样设计的
比如 fgets strcpy

https://zh.
2020-03-26 10:18
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 13楼 xianfajushi
使用指针无需返回,有返回无需指针
大神能不能告诉我哪本书上说的?需不需要用指针、需不需要使用返回值,难道不是服从需求吗?比如我需要调用函数后参数值减少5倍,同时我还需要知道参数除以5的余数,难不成我必须写两个函数?

能编个毛线衣吗?
2020-03-26 10:21
xianfajushi
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:527
专家分:690
注 册:2007-9-8
收藏
得分:0 
使用指针传递数组,数组内容是会被修改的,因此不需要返回数组,使用返回数组何必指针是同样道理,因为,已经达到目标了;
一个函数同时需要返回2个参数如你所说的,返回减少5倍及余数可使用数组或传递2个参数,因此,不需要写2个函数,就以你例举的可以这样写
void  aaa(int shu, int& shan, int& yu){...}调用 int a=111,shan=0,yu=0; aaa(a,shan,yu);这样就可以了,
还可以:void  aaa(int shu, int* jieg){...}调用 int a=111,jieg[2]{0}; aaa(a,jieg);这样就可以了.
关键是达到目的,何必滥用?
以下是引用wmf2014在2020-3-26 10:21:13的发言:
使用指针无需返回,有返回无需指针
大神能不能告诉我哪本书上说的?需不需要用指针、需不需要使用返回值,难道不是服从需求吗?比如我需要调用函数后参数值减少5倍,同时我还需要知道参数除以5的余数,难不成我必须写两个函数?

2020-03-26 10:37
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
以下是引用xianfajushi在2020-3-26 10:37:03的发言:

使用指针传递数组,数组内容是会被修改的,因此不需要返回数组,使用返回数组何必指针是同样道理,因为,已经达到目标了;
一个函数同时需要返回2个参数如你所说的,返回减少5倍及余数可使用数组或传递2个参数,因此,不需要写2个函数,就以你例举的可以这样写
void  aaa(int shu, int& shan, int& yu){...}调用 int a=111,shan=0,yu=0; aaa(a,shan,yu);这样就可以了,
还可以:void  aaa(int shu, int* jieg){...}调用 int a=111,jieg[2]{0}; aaa(a,jieg);这样就可以了.
关键是达到目的,何必滥用?

不是你说滥用就是滥用了
参数是指针 同时返回值是指针
可以发挥其他作用
比如 检查函数调用是否成功
while(fgets(str, sizeof str, fp) != NULL)
{

}

比如 直接作为其他操作的参数
strcmp(strcat(str, strsrc), "password");
puts(strcpy(str, strsrc));



[此贴子已经被作者于2020-3-26 10:44编辑过]


https://zh.
2020-03-26 10:41
xianfajushi
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:8
帖 子:527
专家分:690
注 册:2007-9-8
收藏
得分:0 
用一个示例来说明void 数组右移(int* a, int aa, int aaa)
图片附件: 游客没有浏览图片的权限,请 登录注册

可以看到12被移动了4个位置,说明数组内容被修改了,因此,无需写返回函数。
2020-03-26 10:45
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 16楼 xianfajushi
口&&可...口&&可...
我还觉得你滥用参数、滥用指针呢。
收到的鲜花
  • lin51616782020-03-26 10:50 送鲜花  5朵   附言:哈哈哈哈哈 一百分 一百分

能编个毛线衣吗?
2020-03-26 10:49
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
回复 20楼 xianfajushi
fgets strcpy 这样的函数 没有滥用指针 你可以说是滥用指针
那么 你自己写的函数没有滥用指针 别人也可以说你滥用指针呗
不就是 随口胡说 谁不会?

https://zh.
2020-03-26 10:58
快速回复:数组错误。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020391 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved