简单C语言问题

程序:#include<stdio.h>#include<stdlib.h>#include<string.h>voidsort(char*name[],intn);vo... 程序:
# include <stdio.h># include <stdlib.h># include <string.h>
void sort (char *name[], int n);void print(char *name[], int n);void main(){ char *name[] = {"Follow me","BASIC","Great Wall","FORTRAN","Computer design"}; int n= 5; sort(name , n); print(name , n); system("pause");}
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[i]; name[i] = name[k]; name[k] = temp; } } }}
void print(char *name[], int n){ int i ; for(i = 0 ; i < n ; i++) { printf("%s\n", name[i]); }}
编译没通过,显示如下:

也就是sort函数中这行有问题if(strcmp(*name[k], * name[j])>0),正确的好像应该是把*去掉:if(strcmp(name[k], name[j])>0),为什么不加*?现在不是要比较name指针数组中第一个值的大小呀,不加*不是比较指针值的大小吗??
求高手解答,初学C语言
是数组指针与单个指针的区别吗?这方面还不太懂,求详细解答下
展开
 我来答
guoacc
2013-10-04
知道答主
回答量:30
采纳率:0%
帮助的人:21万
展开全部
首先name数组里盛放都是指针变量,我想这个你应该都明白了name[k]和name[j]也是表示分别指向第k-1个元素的指针和第j-1个元素的指针,我想这个你也应该明白,那么下面在举个例子帮助你理解下面的东东假设你定义了一个数组a[n];那么我想a=&a=a[0](其实这里的a就是一个指针,一个指向数组的指针)这个你应该懂吧,同样的道理那么name[k]和name[j]其实已经表示第k-1个元素(字符串数组)和第j-1个元素(字符串数组)的的第一个字符所以呢也就没有必要在加上*号,如果加上了那么他要只要表示什么呢,什么都表示不了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友34adba635
2013-10-04 · TA获得超过367个赞
知道小有建树答主
回答量:296
采纳率:0%
帮助的人:306万
展开全部
从错误提示来看,是类型不兼容。

这个在C里面是合法的,算Warning,但在C++中是错误。

用gcc可以编译过去:
[root@ ~]# cc -o 2 -Wall 2.c
2.c:6: 警告:‘main’的返回类型不是‘int’
2.c: 在函数‘sort’中:
2.c:23: 警告:传递‘strcmp’的第 1 个参数时将整数赋给指针,未作类型转换
/usr/include/string.h:143: 附注:需要类型‘const char *’,但实参的类型为‘char’
2.c:23: 警告:传递‘strcmp’的第 2 个参数时将整数赋给指针,未作类型转换
/usr/include/string.h:143: 附注:需要类型‘const char *’,但实参的类型为‘char’
追问
const char和char有什么不同吗?
追答
const限定词会要求编译器保证对象的值不会被改变。

例如 char *p="hello",你可以通过p[0]='H'的方式,将*p的值改成Hello。

但如果你定义成const char *p='hello',再执行p[0]='H'时,会报错。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wanglei980823
2013-10-04 · TA获得超过103个赞
知道小有建树答主
回答量:216
采纳率:0%
帮助的人:75.2万
展开全部
传进去的是地址,不是值
更多追问追答
追问
strcmp里面比较的不应该是字符大小啊?不取*就是表示地址了,地址还能比较出大小吗?
追答
看一下函数原型就明白了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式