Chinaunix首页 | 论坛 | 博客
  • 博客访问: 714883
  • 博文数量: 126
  • 博客积分: 2944
  • 博客等级: 上校
  • 技术积分: 1160
  • 用 户 组: 普通用户
  • 注册时间: 2005-02-17 11:09
个人简介

文章分类

全部博文(126)

文章存档

2022年(1)

2018年(1)

2017年(5)

2016年(5)

2013年(5)

2012年(21)

2011年(24)

2010年(1)

2009年(2)

2008年(12)

2007年(6)

2006年(19)

2005年(24)

分类: C/C++

2012-07-24 16:42:38

如下例:

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     char * s = "abc";
  5.     char * ss = "abd";

  6.     if(*s == *ss){
  7.         printf("==\n");
  8.     }else{
  9.         printf("!=\n");
  10.     }

  11.     return 0;
  12. }
输出是:

原因是 if 语句比较的是两个指针所在位置的第一个字节的值。
c语言的字符串比较函数是strcmp(const char * s1, const char * s2);

如果比较的是别的类型,比如char,int8,int16,int32,float,double,那么“==”会考虑类型,另外,
如果这么比较:
if ("abc" == "abd") ...
那么结果是“否”。
那么是否可以这么说:当两个指针比较时,只比较第一个字节,而不管指针类型?
验证:

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     char * s = "abc";
  5.     char * ss = "abd";
  6.     int * i = (int *)s;

  7.     unsigned int * j = (unsigned int *)ss;

  8.     printf("%x, %x\n", *i, *j);

  9.     if(*j == *i){
  10.         printf("==\n");
  11.     }else{
  12.         printf("!=\n");
  13.     }

  14.     return 0;
  15. }
输出:

可见对于int类型和unsinged int类型的指针,比较的不仅仅是第一个字节。

对于c语言来说,因为没有字符串类型的指针,只能用指向字符的指针来代替。

阅读(897) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~