当前位置:编程学习 > C/C++ >>

关于C++的一道题

阅读下面程序,然后请写出输出结果:
[cpp] view plaincopy
#include <iostream>  
  
using namespace std;  
  
int main(void)  
{  
    char a[]="123";  
    char b[]="123";  
  
    char *c="123";  
    char *d="123";  
  
    const char e[]="123";  
    const char f[]="123";  
  
    const char *g="123";  
    const char *h="123";  
  
    cout<<(a==b)<<" "<<(c==d)<<" "<<(e==f)<<" "<<(g==h)<<endl;  
  
    return 0;  
}  
输出结果如下图:
 
分析:为什么会这样的结果呢?首先我们先分析一下程序,首先我们先看看第一组a和b,那么a和b是什么呢?根据我们所学,我们知道a和b是数组的首地址,那么这个表达式(a==b)结果必然是不相等的,所以表达式的结果为0.然后我们再看一下第三组,前面多了个const限定符,const限定符只是在编译阶段编译器检查是否程序中有修改其变量的行为,当然我们可以通过一些手段来骗过编译器,来达到修改其值,不过这里有没有const和输出结果无关,与第一组a和b是一样的,因为e和f都是数组首地址,所以表达式(e==f)结果也必然为0.那么我们关注一下第二组和第四组,这里定义的c和d以及g和h都是字符串指针,按道理来说他们的地址应该不相等,为什么(c==d)和(g==h)的表达式为1呢?原因就是编译器过于聪明,字符串“123”在内存中只保留了一份,所以指针指向的是同一地址,那么自然的地址也相同,必然输出1。
 
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,