Chinaunix首页 | 论坛 | 博客
  • 博客访问: 340029
  • 博文数量: 73
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1293
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-07 11:17
个人简介

爱运动,爱看书,爱生活!

文章分类

全部博文(73)

文章存档

2014年(7)

2013年(66)

分类: C/C++

2013-09-03 14:51:43


点击(此处)折叠或打开

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     char str1[]="Hello world";
  5.     char str2[]="Hello world";

  6.     char *str3="Hello world";
  7.     char *str4="Hello world";

  8.     if(str1==str2){
  9.         printf("str1 and str2 is same.\n");
  10.     }
  11.     else
  12.         printf("str1 and str2 is not same\n");
  13.     if(str3==str4){
  14.         printf("str3 and str4 is same.\n");
  15.     }
  16.     else
  17.         printf("str3 and str4 is not same.\n");
  18.     
  19.     return 0;
  20. }
分析:
/*
结果:str1 and str2 is not same
 str3 and str4 is  same
结果分析:
对于str1和str2,这是两个初始地址不同的数组
分别为这两个数组分配了12字节大小的空间,再把
"Hello world"分别复制到数组中去。
有一个问题对于复制过程是怎么样的呢?是一个字符一个字符复制吗?
做一个这样的测试:
char s[]="abc\0def";
printf("%s\n",s );
结果是abc,正好证明了这个复制过程是一个一个字符串的。


对于str3和str4,这是两个指针,指向了一个字符串常量,
它在内存中只有一个拷贝,str3和str4是指向同一个地址。
所以比较两个地址是相同的,要注意这个常量字符串不能
被改变,因此对她赋值修改均是错误的,涉及到要程序执行过程
中字符串修改的操作,尽量用字符数组。
*/

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