| 查看: 775 | 回复: 7 | ||
hdy523331137银虫 (小有名气)
|
[求助]
关于c语言i指针问题 已有3人参与
|
|
#include<stdio.h> #include<string.h> int main() {void sort(char *name[],int n); void print(char *name[],int n); char *name[]={"Follow","Bie","Grewds","FOR","Cfefe"}; int n=5; sort(name, n); print(name, n); return 0;} void sort(char *name[],int n) { char *temp; int i,j,k; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) if(strcmp(name[k],name[j])>0) k=j; if(k!=i) {temp=name;name=name[k];name[k]=temp;}}} void print(char *name[],int n) { int i; for(i=0;i<n;i++) printf("%s\n",name);} if(strcmp(name[k],name[j])>0) 为什么不换成if(strcmp(*name[k],*name[j])>0)?name[k]和name[j]不是只表示地址吗?怎么会表示字符串呢? 将{temp=name;name=name[k];name[k]=temp;}换成{*temp=*name;*name=*name[k];*name[k]=*temp;}为什么不行呢?谢谢各位大侠了 |
» 猜你喜欢
最失望的一年
已经有12人回复
拟解决的关键科学问题还要不要写
已经有8人回复
存款400万可以在学校里躺平吗
已经有29人回复
求推荐英文EI期刊
已经有5人回复
请教限项目规定
已经有4人回复
国自然申请面上模板最新2026版出了吗?
已经有20人回复
26申博
已经有3人回复
基金委咋了?2026年的指南还没有出来?
已经有10人回复
基金申报
已经有6人回复
疑惑?
已经有5人回复
» 本主题相关价值贴推荐,对您同样有帮助:
Ansys Fluent 编译UDF及加载UDF出现错误
已经有14人回复
类的数组成员初始化问题
已经有5人回复
关于变量精度设置以及变量名的一些问题
已经有6人回复
本人对指向指针的指针和指针数组的心得体会
已经有7人回复
c语言求助,一个小程序详细讲解
已经有13人回复
关于fortran中的rewind 语言
已经有5人回复
c语言动态数组
已经有7人回复
【转帖】指针是通往地狱的捷径
已经有5人回复
【分享】在大的项目中为什么不用c++[也顺便测试一下你的c++基本水平]
已经有5人回复
【求助成功】Band-procar 和Dos-procar 程序执行出错
已经有8人回复
2楼2014-12-21 03:27:21
3楼2014-12-21 03:58:05
4楼2014-12-21 04:02:20
hdy523331137
银虫 (小有名气)
- 应助: 0 (幼儿园)
- 金币: 117.3
- 散金: 30
- 帖子: 67
- 在线: 26.9小时
- 虫号: 2718187
- 注册: 2013-10-12
- 专业: 农业水利
5楼2014-12-21 09:39:03
sxu2009
至尊木虫 (正式写手)
- 应助: 27 (小学生)
- 金币: 10463.7
- 散金: 744
- 红花: 5
- 帖子: 983
- 在线: 537小时
- 虫号: 861529
- 注册: 2009-10-01
- 性别: GG
- 专业: 计算机科学的基础理论
【答案】应助回帖
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
hdy523331137: 金币+30, ★★★★★最佳答案 2014-12-21 21:41:05
感谢参与,应助指数 +1
hdy523331137: 金币+30, ★★★★★最佳答案 2014-12-21 21:41:05
|
问题一:if(strcmp(name[k],name[j])>0) 为什么不换成if(strcmp(*name[k],*name[j])>0)?name[k]和name[j]不是只表示地址吗?怎么会表示字符串呢? 参考解答:因为strcmp函数的两个形式参数都是指针(地址),调用时实参类型应与其一致,所以strcmp(name[k],name[j])不能改成strcmp(*name[k],*name[j])。 问题二:将{temp=name;name=name[k];name[k]=temp;}换成{*temp=*name;*name=*name[k];*name[k]=*temp;}为什么不行呢? 这个复合语句本身就有问题——name表示name[0]的地址&ame[0];它与name[k]的level是不同的,所以{temp=name;name=name[k];name[k]=temp;}应该为{temp=*name;*name=name[k];name[k]=temp;};但不能改为{*temp=*name;*name=*name[k];*name[k]=*temp;}(因*temp和*name类型不同)。 完整程序如下: [code] #include<stdio.h> #include<string.h> int main() { void sort(char *name[],int n); void print(char *name[],int n); char *name[]={"Follow","Bie","Grewds","FOR","Cfefe"}; int n=5; sort(name, n); print(name, n); return 0; } void sort(char *name[],int n) { char *temp; int i,j,k; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) if(strcmp(name[k],name[j])>0) k=j; if(k!=i) { temp=*name;*name=name[k];name[k]=temp; } } } void print(char *name[],int n) { int i; for(i=0;i<n;i++) printf("%s\n",name); } [\code] |
6楼2014-12-21 12:11:42
sxu2009
至尊木虫 (正式写手)
- 应助: 27 (小学生)
- 金币: 10463.7
- 散金: 744
- 红花: 5
- 帖子: 983
- 在线: 537小时
- 虫号: 861529
- 注册: 2009-10-01
- 性别: GG
- 专业: 计算机科学的基础理论
7楼2014-12-21 12:12:50
m57091003
木虫 (著名写手)
- 应助: 14 (小学生)
- 金币: 3242.7
- 散金: 11
- 红花: 14
- 帖子: 1031
- 在线: 483.3小时
- 虫号: 581868
- 注册: 2008-07-18
- 性别: GG
- 专业: 计算机科学的基础理论
8楼2014-12-21 13:24:08













回复此楼