strcmp((a,b)?b:a)

请问这个代表什么意思,比较大小的吗?

strcmp((a,b)?b:a) //直接错误!! strcmp ()需要两个参数

(a,b)?b:a只算一个 参数
可能你写错了
(a,b)的值 == b 逗号表达式 (expr1, expr2)==(expr2) 返回第二个表达式的值

c=(strcmp(a,b)>0)?b:a) //像这样还差不多
这样 strcmp(a,b)比较大小 大于返回1 等于返回0 小于是-1
等字符串a>字符串b 结果是: c=b;
否则字符串a<=字符串b 结果是: c=a;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-05
1.(char**)a 将变量a强制转换成char类型的指向指针的指针
2.对1算出来的地址解引用

其实对strcmp的形参做这些操作的目的只有一个,就是转换成char *类型,再传入。

这里a是一个指针,指向的地方又是一个指针(即a是指向指针的指针),a指向的那个指针所指向的地方才是存放我们真正想要的值

具体的说:
假设a这个变量的值是0x1234,由于a是个指针0x1234表示的当然是个地址,
如果对a变量解引用一次,就是到0x1234这个地址上去看看,假设看到的值是0x2345,
由于a是个指向指针的指针,即指向的地方存的还是个指针,就是0x1234这个地方存放的值0x2345还是个地址,这个地址0x2345就是一个字符串或者字符数组的首地址,起类型是char * 所以就可以作为strcmp的形参了

至于strcmp((char*)a,(char*)b))和strcmp(*(char**)a,*(char**)b))
的差别在于strcmp((char*)a,(char*)b))中的a和b已经是某种类型的指针(不是指针的指针)了,就无需先强制转换成char **了,只需要转换成char * 就可以了

最后一个:
return(*(char *)a-*(char *)b),是把指针a和b转换成char * 然后解引用一次后就得到了指针所指向的字符了,返回的值是两个字符的ASCII值的差值

关于强制类型转换
char (var1) 和int(var1)区别:
char (var1)告诉编译器把var1变量所在的内存的字节序列,每次一起解释1个字节(char是单字节类型的)
int(var1)告诉编译器把var1变量所在的内存的字节序列,每次一起解释4个字节,即每次取4个字节的内存解释为一个int(int是4字节类型的,有的环境中是2字节的,就一次解释2个字节)
第2个回答  2011-03-05
这是用到了一个三目运算符,取两个字符串中较大的那个,比较时从每个字符串的第一个字母开始,依次比下去,比较ASCII码大小。

相关了解……

你可能感兴趣的内容

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