char型指针与其它指针或数组的细节

一道常见题

    char * str7="abc";
    char * str8="abc";
    cout<<(str7==str8)<<endl;

输出结果为1,

    cout<<str7<<endl;

的输出结果是abc,这与整型指针等结果不同,而且初始化方式也不同

    int i=5;
    int * ip=&i;
    cout<<ip<<endl;
    cout<<*ip<<endl;

整型指针的初始化必须用这种形式,而且输出ip的结果时i的地址,*ip的输出结果是i的值5。
二者的初始化方式不同,从《C++程序设计(谭浩强)》第6章的相关知识可以了解到,字符串数组增加了一中初始化方式。:

    int i[2];
    i[0]=5;
    i[1]=6;
    int * ip=i;
    cout<<ip<<endl;
    cout<<&i<<endl;
    cout<<*ip<<endl;

二者有一个共同点是:char * p和int * ip,它们本身是一个变量,是用来存储内容,只是存储的是地址, 

当p和ip都指向数组的时候,相同点是接引用后都是输出第一个元素,不同点是直接cout没有*操作符是,p的结果时字符串的内容,而ip的结果是数组的地址 

在执行cout输出流时,每输出一个字符之前先检查一下,看它是不是‘’,如果是''就停止输出。——《C++程序设计(谭浩强)》150页

 2014-05-13

从下面这一段代码观察调试结果:

    char * str7="abc";
    char * str8="abc";
    char * str9="abc";
    char * str10="ab";

可以发现,当使用相同的字符串“abc”给不同的指针初始化的时候,这些指针中保存的地址是相同的,都是0x00f478a0,但当使用另一个字符串“ab”初始化char型指针的时候,结果则不同,但类似于str7本身是一个变量,它本身的地址及&str7与其它变量的地址是不同的。不知道内存具体的存储方式,不过可以理解为同一个字符串被存放在内存中同一个临时变量或者临时字符数组中或者,相等的常量字符串被存放在同一个地方,当使用str7、str8等的指针执行它们时,值是相同的

 当使用char型数组的时候会直接将字符串“abc”存放在数组中,如果有定义了str1和str2两个char型数组,则开辟两个数组空间,两个数组地址是不同的,只是存放的内容都是“abc”,如下所示:

 char str1[]="abc";
 char str2[]="abc";

 另外,如下这种形式就有问题,

    char * str7="abc";

应该用

   const char * str7="abc";
‖==========钟于原创 乐于分享 宁静致远 毋忆典藏==========‖
原文地址:https://www.cnblogs.com/tingshuixuan2012/p/3723766.html