字符地址是否相等

来源:互联网 发布:淘宝店怎样才能赚钱 编辑:程序博客网 时间:2024/06/05 11:36
void main() {   char str1[]="abc";  char str2[]="abc";   const char str3[]="abc";  const char str4[]="abc";   const char *str5 = "abc";  const char *str6 = "abc";
  char *str7 = "abc";  char *str8 = "abc";
     std::cout<<(str1==str2)<<(str3==str4)<<(str5==str6)<<(str7==str8)<<std::endl;
 }  输出0 0 1 1,为什么

你要知道,你定义一个数组,是要分配存储空间的  你是先定义他,然后给他赋值的,首先char str1[]="abc";  你定义了一个str1的数组,然后将字符穿赋给他  系统就已经分配了一个存储空间给他,也就是说,这些存储空间  已经被用了,不再是可用于分配的存储空间了  因此,在之后char str2[]="abc";  就不可能分配相同的空间给str2,所以自然地址是不可能相同的    同理,这两个也是一样的 const char str3[]="abc"; const char str4[]="abc";  因此,他们俩个的地址都是不同的,哦,忘说了str3和str4都是数组名 他们实际都是个指针,都存储的是地址,存储什么样的地址呢,存储的是系统为其分配的存储空间的首地址的  因此,str3肯定不会等于str4的,系统不会为他们分配相同的存储空间给他们俩的,因为给str3分配存储空间之后,这些存储空间就是不可用的了 自然给str4分配存储空间时,自然是分配的另外的存储空间了  而对于const char *str5 = "abc"; const char *str6 = "abc";  这两个指针存储的都是字符串"abc"的地址,因此他们俩的值是相等的 即都是字符串的地址  现在应该知道了把,总之,把握住一点,系统是先分配存储空间,然后给存储空间赋值,已经分配了的存储空间是不能再被使用的,所以,既然不能再使用了,因此,自然地址是不会相同的
原创粉丝点击