C++复习_数据类型

字符和字符串

1. C-stype string

    C风格字符串:以null character结尾('\0')

    ->放在数组中的char序列只有以\0结尾才是一个字符串,否则只是一个char数组。

    ->char cat[] = "pangpang";

    ->sizeof(数组名) 返回数组占用空间大小(元素个数x每个元素的大小)

        所以 sizeof(cat)包含了\0的大小。strlen(cat) 不包含\0的大小。

        sizeof(cat) == strlen(cat) + 1

2. cin

    使用空白字符(空格 tab键 换行符)来确定字符串的结束位置,并自动在结尾添加\0。

    所以用cin只能读取一个单词 不能读取一个句子

3.getline()

    读取整行,通过换行符确定输入结尾,不保存换行符 末尾加\0。cin.getline()

    cin.getline(car, 20);

4.get()

    读取整行,但是不丢弃换行符,而是将其留在输入队列中。

    如果连续调用两次get(),第二次获取的就是这个换行符。

    cin.get(name1, size1); // 读取第一行

    cin.get(); // 处理输入队列中上面语句留下的换行符

    cin.get(name2, size2); // 读取第二行

    -------------------------------------

    cin.get(name1, size1).get();  // get返回的是cin对象,通过此对象再调用get()函数

    cin.getline() 返回的也是cin对象

    getline(cin, string)

5.std::string对象

    可以使用C风格字符串初始化string对象。

    可以使用cin键盘输入存储到string对象。

    可以使用cout显示string对象。

    可以使用数据表示法访问存储在string对象中的字符。string[n]

6.C风格字符串与string对比

    strcat拼接 strcpy拷贝

    string可以直接调用成员方法和操作符

★C++的初始化列表可以避免缩窄转换,编译时会报错

结构体

1.struct struct_name {};

    C语言声明结构体struct_name类型的变量:struct struct_name struct_var_name;

    C++声明结构体struct_name类型的变量:struct_name struct_var_name;

2.结构体中的位字段

    struct name

    {

        unsigned int SN:4;

        ...

    }

共用体union

    1.长度是最大长度成员的长度,每次只能存储一个值

    2.匿名共用体anonymous union,没有名称,其成员是位于相同地址处的变量

      struct widget

      {

          char brand[20];

          union

          {

              long id;

              char id_char;

          }

      }

      widget prize;

      prize.id;

      prize.id_char;

枚举enum

    1.提供创建符号常量的方式,可以替代const。

    2.定义新类型

指针与数组

    1.int* p1, p2; // p1是指向int的指针,p2是int类型变量

    2.对空指针使用delete是安全的

    3.动态数组,指针和数组名的用法几乎相同

      1.差别,数组名不是变量,不能修改值。

        2.sizeof(数组名)得到数组的长度,sizeof(指针)得到指针的大小。

      int* pInt = new int[3];

      pInt[0] = 1;

      pInt[1] = 2;

      pInt = pInt +1;

    4.指针和数组基本等价的原因是指针算术和C++内部处理数组的方式。

      C++将数组名解释为地址,数组第一个元素的地址。

      pInt[1] <=> *(pInt+1)

    5.数组的地址与指针

      short tell[10];

      tell -> 数组第一个元素的地址&tell[0]

      &tell -> 整个数组的地址,从数值上看与tell值相等,但是意思不同

      tell+1 -> 地址加 1 个short

      &tell+1 -> 地址加20个short

      short(*pas)[20] = &tell; // 其类型为short(*)[20]

      (*pas0[0]是tell数组的第一个元素

    6.char* ps;  cin >> ps; cout << ps;都是严重错误。ps没有分配空间

    7.const char* pStr = "cat";

      pStr为"cat"的地址;"cat"是字符串字面值常量,pStr只能用来访问,不能用来修改。

    8.如果给cout一个指针,则打印地址。但是如果是char*,则打印字符串,

      如果要打印字符串的地址,那么要打印(int*)ps。

    9.自动存储:自动变量automatic variable

      使用自动存储空间,存储在栈中,先定义的后释放:先进后出LIFO

      静态存储:函数外定义或者函数内定义为static XXX

      动态存储:new/delete管理的内存池,称为堆(heap)或者自由存储空间(free store)

    10.const struct_name *art[3] = {&s1, &s2, &s3}; // 指针数组art[0]是一个指针

        auto ppArt = art;  pArt的类型为const sturct_name ** 指向art数组的一个指针

        // art是数组名,是指向第一个元素的指针,pArt是一个指针,指向const struct_name的指针

vector & array

    1.vector是动态数组。

        效率比数组低,是new创建动态数组的替代品。内部使用new/delete自动管理内存。

        vector<typeName> vect(n); // n可以是常量也可以是变量

    2.array固定长度,使用栈存储数据,效率与数组相同。

        array<typeName, n_element> arr; // n_element不能是变量

    ★C++11中均可使用初始化列表初始化,C++98不可以。

    3.vector array 数组都支持下标访问;array 数组在栈区,vector在堆区;

        array对象可以给另一个array对象赋值(大小一致),数组和vector必须逐元素复制数据。

    4.下标访问 VA .at()

      at() 运行时捕捉非法索引,代价是效率比下标低;下标访问不会报错,产生未知行为。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352