注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mihooke's blog

IT之恋

 
 
 

日志

 
 

C-style表示字符串解惑  

2014-10-29 14:10:00|  分类: 学习录 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


1) 普通数组表示法char  arr[]=mihooke这表示在数组arr中存放的是mihooke单词,而单词mihooke是在双引号中,所以它是字符串常量,在内存中的常量区,保存在arr[]数组中的只不过是mihooke单词的一份拷贝而已,且这份拷贝在栈中。特别要注意,此时arr[]数组末尾有一个\0,来标识这个字符串的结尾。

char arr[]="mihooke";

cout<<arr<<" sizeof():"<<sizeof(arr)<<" strlen():"<<strlen(arr)<<endl;

运行结果:

mihooke sizeof():8 strlen():7


2)在数组的大括号之内,用单引号表示char  brr[]={m,i,h,o,o,k,e};

这也表示字符串形式,只是形式上,然而brr[]里面存的不是真正的字符串,因为这样写没有添加字符串结束标识\0,如果打印brr的话,它会打印所有的字符,直到找到一个\0为止;但是如果这样写:

char  brr[]={m,i,h,o,o,k,e,\0};

这就表示一个字符串了,因为放在数组里面,有\0结尾,实际上brr是一个字符数组。

char brr[]={'m','i','h','o','o','k','e','\0'};

cout<<brr<<" sizeof():"<<sizeof(brr)<< " strlen():"<<strlen(brr)<<endl;

运行结果:

mihooke sizeof():8 strlen():7

可以看到1)、2)两种表示是一样的。


3)char * 来定义一个指针char *p=mihooke;

这就是一般所说的字符串,定义一个指针,指针指向一个字符串常量的起始位置,同样,mihooke单词是保存在内存中的字符常量区的,末尾也有\0

char *p="mihooke";

cout<<p<<" sizeof():"<<sizeof(p)<<" strlen():"<<strlen(p)<<endl;

运行结果:

mihooke sizeof():4 strlen():7

看到了吧,指针p只是保存了一个地址而已。


要特别注意的是,p是指向字符串本身,而不是字符串的一份拷贝,因为是字符串常量,所以任何对p进行字符串操作的修改行为都是编译器不允许的,比如,要用strcpy()函数拷贝pq中,那么便会出错;但是用数组便可以做这样的修改,因为数组里保存的只是字符串常量的一份拷贝,这就是数组和指针表示字符串的最大区别。

C-style表示字符串解惑 - mihooke - mihooke的博客
 
  评论这张
 
阅读(42)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017