C++数组

数组

#include <iostream>
using namespace std;
int main()
{
    //定义和初始化内置数组
    unsigned cnt = 42; //不是常量表达式
    constexpr unsigned sz = 42; //常量表达式
    int arr[10];  //含有十个整数的数组
    int *parr[10]; //含有十个指针的数组
    string bad[sz]; //sz是一个常量表达式
    //默认情况下,数组的元素被默认初始化

    //显示初始化数组元素
    const unsigned szz = 3;
    int ial[szz] = {1,2,3};
    int a0[] = {1,2,3,5};  //维度是4的数组
    int a3[5] = {1,2,3,4,5};

    //字符数组的特殊型性
    //字符数组可以用字符串字面值对此类数组初始化,当使用这种方式时,一定要注意字符串字面值的
    //结尾处还有一个空字符,这个空字符也会像字符串的其他字符一样被拷贝到字符数组中
    char a1[] = {'a','c','d','e'}; //列表初始化,没有空字符
    char a2[] = {'d','v','x','s','a','\0'}; //列表初始化,含有显示的空字符
    char a4[] = "c++"; //自动添加表示字符串结束的空字符
    //const char a5[6] = "Daniel";  //错误,没有空间可以存放空字符

    //数组不允许拷贝和赋值
    int aa[] = {0,1,2};
    //int aa2 = aa;  //错误:不允许使用一个数组初始化另外一个数组
    //aa2 = aa;      //错误:不允许把一个数组直接赋值给另一个数组


    /*
    理解复杂的数组声明
    */
    int *parray[10];   //含有十个整形指针的数组
    //int &refs[10]; //不存在引用的数组

    for(auto a:a1){
        cout<<a<<endl;
    }

    //指针和数组
    //使用数组的时候编译器一般会把它转换成指针
    //取地址符&,获取指向某个对象的指针
    //在很多用到数组名字的地方,编译器会自动将其替换为一个指向数组首元素的指针
    string nums[] = {"one","two","three"};
    string *p = &nums[0];
    for(int n = 0;n<3;n++){
        cout<<*p<<endl;
        ++p;
    }

    //指针也是迭代器
    int abcarray[] = {1,2,3,4,5,6};
    int *ppp = abcarray;
    int *e = &abcarray[6]; //得到尾元素的下一个元素的位置指针
    for(int *b = ppp;b!=e;++b){
        cout<<*b<<endl;
    }

    //标准库函数begin和end
    //这两个函数与容器中的两个同名成员功能类似,
    //不过数组毕竟不是类类型,因此这两个函数不是成员函数
    int opop[] = {1,323,232,2323,23,2323};
    int *beg = begin(opop);
    int *last = end(opop);
    while(beg!=last){
        cout<<*beg<<endl;
        ++beg;
    }

    //指针运算
    //两个指针相减的结果的类型是一种名为ptrdiff_t的标准库类型,和size_t一样。
    //是一种带符号类型
}

你可能感兴趣的:(C++数组)