1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > c语言char数组的对比 char数组 char指针与字符串常量的比较

c语言char数组的对比 char数组 char指针与字符串常量的比较

时间:2021-07-11 13:53:48

相关推荐

c语言char数组的对比 char数组  char指针与字符串常量的比较

数组不是基本类型,不能直接参与比较,数组与字符串及字符指针与字符串比较其实比较的是二者的地址。

例:

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”比较时结果会不一样呢?其实t=="char"比较的是地址!

首先,当你这么引用一个字符串的时候"char",它表示存储在程序的常量区的一串字符串,它返回的就是这个常量区的字符串地址比如假设这个地址是0x004038b0"char",那么当你使用char*temp="char";的时候,temp就得到了这个常量字符串的地址,也就是temp等于0x004038b0

或许你可以试试

char* p1 = "char";

char* p2 = "char";

char* p3 = "char";

char* p4 = "char";

这里的p1p2p3p4的值都一样,都是指向常量区字符串"char",比如上面的0x004038b0

然而当你这么只用的时候

chartest[]="char";

这里情况就和上面的不一样了,这样写的时候,编译器并不是让test也指向常量区的字符串"char",而是在本地堆栈分配了一段和"char"一样大的空间,如何把常量区字符串"char"拷贝到test

可以这么理解

char*p1="char";p1和常量区的"char"是同一个东西,地址相同

chartest[]="char";test和常量区的"char"不是同一个东西,但是内容相同

int isequiv(char *t)

{

if (t == "char")

return 1;

else

return 0;

}

以上面为例子

当你这么比较的时候if(t=="char")编译器是去比较t和"char"是不是同一个东西,它们的值(字符串的地址)是不是一样,而不是比较它们的内容是不是一样

由前面的讲解可以知道

char*p1="char";p1和"char"的值是一样的

chartest[]="char";test和"char"的值不一样,只是它们指向的字符串内容一样而已

要比较两个字符串的内容是不是一样,用strcmp()返回0就是一样

比如,你那个函数可以改为

int isequiv(char *t)

{

if (strcmp(t, "char") == 0)

return 1;

else

return 0;

}

ps:你要理解两个感念,

同一个东西

内容相同的两个东西

注:字符串比较用用strcmp()函数,strcmp(test,"char")及strcmp(temp,"char")!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。