C关于字符串操作的一点小总结

来源:互联网 发布:淘宝助理怎么下载 编辑:程序博客网 时间:2024/06/05 23:48


C关于字符串操作

先看一段代码
#include<stdio.h>

#include<string.h>

 

int main()

{

       char str1[] ="apple";

       char str2[] ="apple";

 

       char *p1 ="apple";

       char *p2 ="apple";

 

       printf("str1:%d\nstr2:%d\n",str1,str2);

 

       printf("p1:%d\np2:%d\n",p1,p2);

       return0;

}

猜猜看,str1 和str2相等吗?P1和p2相等吗?

想好了吗?看看下面输出结果:

哈哈,跟你想的一样吗?

要是不一样了,为什么会有这样的结果啊。

那我们来分析分析!
首先

char str1[] = "apple";

char str2[] = "apple";

str1和str2都是字符串数组,

回忆一下

Str1 和str2 代表什么呢?

Str1 和 str2都是指向数组首元素首地址.也就是str1[0]和str2[0]的首地址

Str1[0]和str2[0]分别占用不同的内存单元,当然不一样啦。
再看

char *p1 = "apple";

char *p2 = "apple";

p1 和 p2 代表什么呢?

P1和p2都是指针,指向字符常量区,这里放着”apple”,因为p1和p2都指向了这个
放在常量区的字符串,都代表这个字符串的首地址,当然一样啦,还有一点要注意,
常量区的在字符串是不能修改的。

 

接下来要说明一点!你可曾下过类似的语句吗
if(str1 ==str2)

或者

If(p1 == p2)

这样写正确吗?

根据上面的分析,我们来看看str1 和str2比较的目的是看这两个字符数组存的

字符串相同不相同,而if(str1 == str2)这样写比较的是地址,显然不相同。所以

需要使用strcmp(str1,str2)来比较.

那么If(p1 == p2)这句话对吗?嗯,这样是对的,因为如果他们都指向同一个字符串,

地址肯定相等,否则不同。

原创粉丝点击