学习C++指向字符数组的指针

发表于:2012-12-11 10:25

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:zhaoyl03    来源:51Testing软件测试网采编

  1、数组名是第一个元素的地址;

  2、指针保存的是另一个对象的地址;

  3、cout对象认为char的地址是字符串的地址,如果给cout提供一个字符的地址,则它将从该字符开始打印,直至遇到空字符为止;

  4、用引号括起来的字符串像数组名一样,也是第一个元素的地址;

  记住:在cout和多数C++表达式中,char数组名、指向char的指针以及用引号括起来的字符串常量都被解释为字符串第一个字符的地址.

  5、无法使用string对象初始化char指针,但是string类提供了一个名为c_str的成员函数,以实现此要求;

  6、可以使用指向char数组的指针,构造string对象,有不同的版本;

  7、使用一种容器的一对迭代器初始化另一种容器时,不要求两个容器类型相同。容器内的元素类型也可以不相同,只要它们相互兼容,能够将要复制的元素转换为所构建的新容器的元素类型,即可实现复制。

//9.28.cpp C++ Primer 5_CH
#include <iostream>
#include <vector>
#include <list>
#include <string>
using namespace std;


int main()
{
 char *sa="Allan";
 cout<<sa<<endl;
 //sa保存的是第一个字符的地址,对sa进行解引用得到第一个字符;
 cout<<*sa<<endl;
 char sb[]={'B','o','b'};
 //内存中有大量空字符
 cout<<sb<<endl;
 char sc[]={'S','a','m','\0'};
 cout<<sc<<endl;
 cout<<*sc<<endl;
 char *sar[]={"Allan","Tom","Peter","Raees","Umer"};

 //将(字符指针的)数组的一对迭代器传递给(字符指针的)列表,将列表初始化为
 //数组中的一段元素的副本
 list<char*> slst(sar,sar+5);
 vector<string> svec;

 string str1(sa);
 cout<<str1<<endl;

 //在VS2005上没有"预期的运行时错误"(C++ Primer)
 string str2(sb);
 cout<<str2<<endl;

 string str3(sc);
 cout<<str3<<endl;

 svec.assign(slst.begin(),slst.end());

 for(list<char*>::iterator lit=slst.begin();lit!=slst.end();++lit){
  cout<<*lit<<" ";
 }
 cout<<endl;

 for(vector<string>::iterator vit=svec.begin();vit!=svec.end();++vit){
  cout<<*vit<<" ";
 }
 cout<<endl;
 

 system("pause");
 return 0;
}

  运行结果:

《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • shuangmulin
    2012-12-12 09:41:41

    huhu好东西( ⊙o⊙ )哇

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号