【共读Primer】18.<3.5> 数组 Pag…

2018-08-10 11:12:04来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

存放相同的类型,大小声明后不可改变,性能上优于vector。

数组声明

a[d]; // a是名称。d是维度,也就是数组大小,必须是常量表达式

数组的元素会被默认初始化

数组的元素为对象,所以与vector相同,不存在以引用为元素的情况

数组的显示初始化

    const unsigned sz = 3;     // 用来定义数组的维度,必须是常量
    int ial[sz] = {0,1,2};    // 含有3个元素的数组,元素值分别时0,1,2
    int a2[] = {0,1,2};    // 维度是3的数组
    int a3[5] = {0,1,2};// 等价于 a3[] = {0,1,2,0,0}
    string a4[3] = {"hi", "bye"};// 等价于 string a4[] = {"hi", "bye", ""} 
    // int a5[2] = {0,1,2};// 错误 初始值太多

字符数组应该具有零结尾

    char c1[] = {'C', '+', '+'};        // 列表初始化,没有空字符,虽然编译器不会报错,但是直接当作字符串使用会有问题
    char c2[] = {'C', '+', '+','\0'};    // 列表初始化,含有显示的空字符
    char c3[] = "C++";                    // 自动添加表示字符串结束的空字符
    //const char a4[6] = "Daniel";        // 错误:没有空间放空字符,实际长度应该是7

数组间是不允许使用“=”进行拷贝和赋值的。

一些复杂的指针,指针的数组,数组的指针,数组的引用

    int *ptrs[10];                // ptrs是含有10个整形指针的数组
    //int &refs[10] ;                // 错误 不存在引用的数组
    int (*Parray)[10] = &arr;    // Parray指向一个含有10个整数的数组
    int (&arrRef)[10] = arr;    // arrRef引用一个含有10个整数的数组

访问数组元素

数组的索引从零开始,如果一个数组包含10个元素,那么索引就是0-9.

数组的索引类型是size_t, 这是一个机器相关的无符号类型

索引值的合理范围必须由程序员来保证,这也是很多错误产生的原因

数组和指针

编译器会将数组的名字替换成数组首元素的指针

指针就是数组的迭代器。

    inr arr[] = {0,1,2,3,4,5,6,7,8,9};
    
    int *ptrs[10];                // ptrs是含有10个整形指针的数组
    //int &refs[10] ;                // 错误 不存在引用的数组
    int (*Parray)[10] = &arr;    // Parray指向一个含有10个整数的数组
    int (&arrRef)[10] = arr;    // arrRef引用一个含有10个整数的数组
    
    int *p = arr; // 数组名称是首元素指针
    ++p;          // p指向arr[1], 数组的第二个元素。
    int *e = &arr[10]; // 数组arr的末尾元素的下一个元素地址
    for(int *b = arr; b != e; ++b)
    {
        cout << *b << endl;        //输出arr的所有元素
    }
    
    // 通过标准库函数来获得首尾地址用来遍历整个数组
    //int *pbeg = begin(arr);
    int *pend = end(arr);
    for(int *pbeg = begin(arr); pbeg != pend; ++pbeg)
    {
        cout << *pbeg << endl;        //输出arr的所有元素
    }

指针的运算

    int *ip = arr;
    int *ip3 = ip + 3; // 指针可以加减一个整数,意义是对指针进行数组内移动,+为向后,-为向前,移动的数量为运算符号后的数量。
    auto n = ip3 - ip; // 两个指针相减,所得的类型是prtdiff_t,一个带符号类型。得数是两个原素间的位置差值。
    

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:【共读Primer】15.&lt;3.2&gt; 标准库string Page75

下一篇:利用OpenCV给图像添加中文标注