c中字符数组与字符指针与字符串的比较问题

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函数来做比较。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值