数组

作者: k莫失莫忘 | 来源:发表于2019-07-25 10:54 被阅读0次

    数组

    1. 声明

    typeName arrayName [arraySize]
    

    2. 初始化

    1. 只有在定义数组时才能使用初始化
    2. 不能将一个数组赋给另一个数组
    3. 初始化数组时,提供的值可以少于数组的元素数目。编译器把其他元素设置为零。
    int cards[4] = {1 , 2};
    long totals[500] = {0}; //初始化totals中所有元素为0
    
    1. [] 内为空,编译器将计算元素个数
    short things[] = {1, 5, 3, 6};
    
    C++数组初始化新增规则
    1. 可以省略等号
    int card[4] {1, 2, 3, 4};
    
    1. 可不在打括号内包含任何东西,这将把所有元素设置为零
    2. 列表初始化禁止缩窄转换
    long plies[] = {25, 92, 3.0} // not allowed
    

    3.指针和数组

    指针

    1. 指针的声明
    int* p1, p2 // 创建一个指针(p1)和一个int变量(p2)
    
    1. 指针的危险
      在C++中创建指针时,计算机将分配用来储存地址的内存,但不会分配用来储存指针所指向的数据的内存。
    long *p;
    *p = 233323; // place a value in never-never land
    

    ⚠️一定要在对指针解除引用(*p)之前,将指针初始化为一个指定的、适当的地址。

    1. 使用new来分配内存
    typeName * pointer_name = new typeName;
    

    new从堆(heap)或自由储存区(free store)中分配内存
    C++中,值为0的指针被称为空指针(null pointer)

    1. 使用delete来释放内存
    • delete释放指针指向的内存,但不会删除指针本身
    • 不能用delete释放已释放的内存块
    delete p;
    delete p; // not ok
    
    • delete只能与new配对使用
    int* p = &a;
    delete p; // not allowed, memory not allocated by new
    
    • 对空指针使用delete是安全的
    • delete用于new分配的内存,但并不意味着要使用用于new的指针,而是用于new的地址。
    int *p1 = new int;
    int *p2 = ps;
    delete pq; // ok
    
    1. 使用new创建动态数组
    int *p = new int[10];
    delete [] p;
    

    数组名

    在多数情况下,C++将数组名视为数组的第一个元素地址。
    一种例外情况是,sizeof(数组名) 将返回整个数组的长度。

    指针算术

    指针变量+1后,增加的量等于它指向的类型的字节数。

    数组表示法 & 指针表示法

    C++ 在数组表示法时,会执行如下转换:
    arrayname[i] ---> *(arrayname + i)
    在使用指针时,也会执行如下转换:
    pointername[i] ---> *(pointername + i)

    例如:
    *tacos[0] 表示 *tacos
    *tacos[3] 表示 *(tacos +3)

    相关文章

      网友评论

          本文标题:数组

          本文链接:https://www.haomeiwen.com/subject/qmdcrctx.html