Sin骑士 2015-04-28 13:01 采纳率: 0%
浏览 2597

关于C/C++中char*之间的比较和数组之间的比较的问题

char a[] = "abc";
char b[] = "abc";
char* c = "abc";
char* d = "abc";

if( a==b )
{
    cout<< "a[] and b[] are equal!" << endl;
}else if( a!=b )
{
      cout<< "a[] and b[] are not equal!" << endl;
}

if( c==d )
{
      cout<< "*c and *d are equal!" << endl;
}else if( c!=d )
{
      cout<< "*c and *d are not equal!" << endl;
}

请问输出结果是什么?为什么是这种结果?
  • 写回答

7条回答 默认 最新

  • 纵横车 2015-04-28 13:06
    关注

    a,b,c,d都是什么呀?把他们的声明写出来看看。

    评论
  • threenewbee 2015-04-28 13:30
    关注

    比较的是指针,也就是它们是不是同一个数组,而不是比较字符串是否一致。
    要比较字符串用strcmp

    评论
  • 风吹千里 2015-04-28 13:38
    关注

    ![图片说明](https://img-ask.csdn.net/upload/201504/28/1430227969_765232.png)图片说明
    其实只要你在if语句之前加上输出语句,就明白了,如图,数组a【】,b【】比较,你本意应该是比较数组相等,但是你如果if( a==b )这样比较就是将两个数组的首地址进行比较,而不是数组元素比较。指针*c,*d比较,if( c==d )这样比较的也是地址是指针指向字符的地址!

    评论
  • oyljerry 2015-04-28 13:53
    关注

    比较字符数组用strncmp等函数来比较内容。

    评论
  • csdnword 2015-07-30 09:02
    关注

    不太明白你比较的意图。但要告诉你的是:指针的关系运算:< <= > >= (没见过 “==”的),前提是它们都指向同一个数组中的元素。根据你所使用的操作符,比较表达式将告诉你哪个指针指向数组中更前或更后的元素。标准并未定义如果两个任意的指针进行比较会产生什么结果。

    评论
  • 心若微尘 2015-08-19 14:31
    关注

    这个问题很简单,首先a和b是数组变量会在栈区分配内存,其中a和b就是数组内存的起始地址。c和d是指针变量指向的是位于全局段的字符串字面值常量,其在内存中只存在一份,故而内存地址一样。

    评论
  • 醉花阴柳 2015-12-23 02:59
    关注

    a,b不等,c,d相等
    解释:a,b是数组变量,在编译的时候编译器把常量字符串"abc"(存放在程序的数据区域)复制给a和b,这样比较a和b就是比较a,b数组第一个元素的地址(a,b是两个不同的变量,内存中的位置也不同,只不过在两块不同的内存区域都存放了"abc"的副本)因为两个地址不同,所以结果就是不等。而c和d都是指向常量字符串"abc",它们指到了程序的数据区域了(数据区域的数据禁止修改,如果修改最好的结果是导致程序崩溃),指向的都是同一块内存,所以c等于d

    评论

报告相同问题?

悬赏问题

  • ¥15 如何利用闲置机械硬盘变现
  • ¥15 信号处理中的凸优化问题
  • ¥15 arm虚拟机无法和物理机互通
  • ¥15 如何在此代码上增加一个统计学生生源的功能?(语言-c语言)
  • ¥15 Android导航条遮盖异常
  • ¥15 计算机网络技术基础问题
  • ¥15 设置mac系统只能访问指定网站
  • ¥15 西门子博途 s7 1200控制三台步进电机
  • ¥15 基于非参数的方向距离函数求污染物影子价格(有偿)
  • ¥15 vue+element 生成table