int isequiv(char *t)
{
if (t == "char")
return 1;
else
return 0;
}
int main()
{
char test[] = "char";
char *temp = "char";
printf("%d", isequiv(test));//输出 0
printf("%d", isequiv(temp));//输出 1
return 0;
}
为什么test与temp同"char"的比较结果不一样呢?
—————————————————————————————————————————————————————————————————————————————————————————————回答:
1、char test[]="char";//定义了一个字符数组,数组内容被初始化成"char",他是存在栈上的某个位置。
char* temp="char"; //定义一个指针,指向常量字符串"char",这个地址位置应该是在代码段中;
2、if (t == "char") // 比较t和常量字符串的地址是否相同。
好的编译器,会把相同的常量字符串仅仅存一份拷贝,各个指针都指向这个拷贝。所以楼主的程序使用temp做实参时会得到比较相等(返回1)。
但这也是建立在编译器会把相同的常量字符串存放一份拷贝的基础上的。要是编译器存放多份拷贝,这里比较也可能不同。
对于test来说,这个不是常量字符串,存放地址肯定跟常量字符串“char”是不一样的,比较结果不同是可预期的。
如果想比较字符串的内容,那就不能用t=="char"这样的比较了,应该使用strcmp函数来做比较。