C++第八天 2016-12-07 3.5-3.5

  • 重要 字符数组的特殊性

    使用字符串字面值给字符数组初始化时,会添加一个空字符,需要留出空间

    char a1[] = {'C'} //会再添加一个为'\0'的空字符  数组长度为2

    重要 不允许拷贝和赋值

    不能将数组的内容拷贝给其他数组作为其初始值,也不能用数组为其它数组赋值

    可能有编译器拓展(compiler extension)使用支持数组拓展,但是为了程序通用性,不推荐

    重要问题 理解复杂数组的声明 (存疑 int (&arrref)[10] = arr;不会理解)

    可以定义一个存放指针的数组,允许定义数组的指针和数组的引用。

    int *ptrs[10]; //ptrs是一个含有10个整型指针的数组     int &refs[10] = //不存在引用的数组

    int (*ptrs)[10] = &arr; //ptrs是指向一个含有十个整数的数组

    3.5.2 访问数组元素

    数组可以使用下标访问,下标定义成size_t 类型。

    可以使用for语法进行遍历

    重要 检查下标的值

    需要程序员细心检查。大多数常见的安全问题都源于缓冲区一处错误,当数组或者其它类似结构的下标越界并试图访问非法内存区时,就会产生错误。

    3.5.3 指针和数组

    一般使用取地址符“&”来获得某个对象的指针。数组也相同,下标可以获得该数组指定位置的元素,然后使用取地址符得到指向该元素的指针。

    string *p = &nums[0];

    如果不指定位置,指针指向数组的首位。

    可以推出,一些情况下数组的操作实际上是指针的操作。再推出使用数组作为一个auto变量的初始值,推断得到的类型是指针而不是数组。

    int ia[] ;   auto ia2(ia); 得到的ia2类型是数组。针对一个地址的类型显然是指针。

    重要 指针也是迭代器

    指向数组元素的指针拥有更多功能,vectorstring的迭代器支持的运算,数组的指针全都支持。允许使递增运算符将数组元素的指针向前移动倒下一个元素上。

    上面这么做的前提是已经获取一个指向头元素的指针。获取尾后指针需要使用特定性质

      int arr[10]; //int *e = &arr[10]; 指向arr尾元素的下一个指针 可以利用此写出类似迭代循环

    重要 标准库函数beginend

    C++11新标准为了避免上述操作出现问题,引入了beginend函数,但是并非成员函数,需要指定的调用方式

    int a[10];    int *beg = begin(a);  int *last = end(a); 

    begin返回头元素,end返回尾后元素,这两个函数定义在iterator头文件中。

    注意尾后指针不能执行解引用和递增操作。

    重要 指针运算

    指针可迭代器类似,拥有解引用、递增、比较、整数相加和指针相减功能。

    与整数加减法就是指针前进后退几个元素,相互减法就是求距离,类型为(ptrdiff_t  带符号类型)

    加减法中,编译器不会提示已经超过数组大小,需要自己注意

    只要两个指针指向同一个数组就可以互相比较,比较出是位置;指向不同数组比较毫无意义

    重要 解引用和指针运算交互

    指针加上整数得到一个新指针,允许使用解引用改指针。int ia[] ; int last = *(ia +4);

    如果是 last = *ia +4;则是ia的第一个元素值 加上4

    重要 下标和指针

    如果使用了下标运算,则数组会指向加了整数值下标的元素位置。 数组的下标运算符不是无符号类型,与vectorstring不一样,可以使用下标前进或向后移动。

    3.5.4 C风格字符串

    尽管C++支持C风格字符串,但是在C++程序中最好还是不要使用它们,很容易引发程序漏洞C风格字符串习惯放在字符数组中并以空字符结束(null

    重要 C标准库String函数

    用于操作C风格字符串的函数。必须要以null结束

    char ca[] = { c   strlenca); 错误,必须以null结束

    重要 比较字符串

    比较C风格字符串方法和之前差不多。在标准string库时候使用普通的关系运算符和相等性运算符;在C风格字符串时则是指针而非字符串本身。

    const char cal [J const char ca2[l if (cal < ca2) t' A string example" = "A different string";

    如果想比较C风格字符串需要使用strcmp函数,这时候就不是比较指针。如果相等返回0,前大为正,后大为负。

    重要 目标字符串的大小由调用者指定。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值