C语言指针的问题:利用指针数组对一组城市名升序排列 程序如图

如图,我不懂strcmp(pcity[i]," ")中 pcity[i] 表示什么东西。按这个strcmp函数理解,pcity[i]应该是一个字符串吧? 但是前面有char*pcity[]={"城市名","城市名","城市名"," "};的定义,这里pcity[i]应该是指针数组,数组内容是指向第i行字符串的首地址的指针。那么strcmp(pcity[i]," ")中怎么把地址和字符串相比较呢?
PS:我是菜鸟,在家自学C语言。好困惑 求老师!求教育!

你好!
pcity[i]是指针(存放的是第i行字符串首地址),它指向第i行字符串,例如:pcity[0]即指向字符串'"Wunan"。
strcmp(pcity[i]," ")中,是pcity[i]所指向的字符串与" "相比较,即判断pcity[5]所指向的字符串为" "时,停止循环。追问

还是不明白!从函数strcmp(pcity[i]," ")理解pcity[i]是个字符串啊!从前面定义看pcity[i]是指针,是地址啊!困惑啊!

追答

strcmp()是"string.h"(头文件)中库函数,函数中传递给形参地址(函数有值传递、地址传递),函数获得地址后会自动去访问地址的内容,然后进行比较。学了怎么定义函数,我想你应该就明白了。

追问

看来我还是得再下苦功夫好好看书!感谢你的回答!谢谢!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-02
/*
strcmp是一个库函数
原型是:int strcmp(const char *s1,const char * s2);
即两个参数都是指针类型,所以调用时参数必须为指针

而char * pcity[]是个指针数组,
也就是数组的成员本身就是一个指针
即pcity[1]~pcity[5]都是指向字符串的指针

所以调用时必须是strcmp(pcity[k],pcity[j])的形式
也就是参数中不能出现*pcity[i],因为其不是指针

至于接受两个指针类型的参数后怎么来比较其所指向的字符串大小
那是函数内部的事情,
参数的功能是保证根据参数能访问到字符串就行了

strcmp(const char *s1,const char * s2)
返回值
s1<s2时,返回值<0  
s1=s2时,返回值=0  
s1>s2时,返回值>0

所以strcmp(pcity[i],"")在i<5时返回一个非0的值
可以在for循环中作为控制条件

*/
第2个回答  2012-06-01
pcity是一个指针数组,pcity[i]是一个一个的指针
这里pcity[0] 指向"Wuhan",所以它是一个字符串指针,
strcmp可以接受字符数组或者字符串指针追问

pcity[0] 是个指针我知道,它的内容应该是第一行字符串的首地址吧?
那在strcmp(pcity[i]," ")中,pcity[0] 就变成了字符串了?
我就是不明白 首地址==字符串?
为什么不是strcmp(*pcity[i]," ")

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网