C中为什么不能用==比较字符串?

通常的回答是,==比较的不是字符串的内容,它是在比较指针。或者说,==(或者!=)仅比较两个字符串的首地址,而不会比较字符串每个字符。

那其实接下来应该问的问题是,为什么会只比较首地址呢?

因为早期的C语言只能使用标量。

简单的说,标量scalar就是指char, int, double, enum等数值类型,以及指针。像数组、结构体、共同体这样将多个标量组合起来的类型,被称为聚合类型aggregate。

字符串其实就是char类型的数组,也就是说它不是标量,因此在C中不能用==比较。

在ANSI C中,追加了几个功能:

. 结构体的一次性赋值

. 将结构体作为函数参数值进行传递

. 将结构体作为函数返回值返回

. auto变量的初始化

只涉及结构体;字符串还是不能用==比较的。

posted on 2019-10-11 11:15  freshair_cn  阅读(2342)  评论(0编辑  收藏  举报

导航