zoukankan      html  css  js  c++  java
  • volcanol的工控博客

      说到数组,大家应该都很熟悉,在C、Pascal、Java等语言中,都有数组的概念。在C++中也提供了对数组的支持。数组简单来说就是一堆相同

    数据类型对象的集合。 这里要把握住两个要点: 相同的数据类型、集合。

    一、数组

    1、定义

         数组是由数组存储的对象的类型名、标识符和数组维数组成一种复合数据类型。 类型名规定了可以存储在数组中的对象的类型, 标识符用来标识

    数组,用来在程序中引用数组元素, 维数用来规定数组可以存放多少数组元素。

      数组的定义如下所示:

        类型名    数组标识符[n];  

    下面是一些数组的例子:

      int   iArray[10];   //定义一个数组存储int型对象,可以存储10个整型的数组。

    2、访问

      可以通过下标操作符访问数组元素,就和vector一样。

      例如定义:

      char chArray[3];    

        chArray[0] = 'A';

      chArray[1] = 'b';

      chArray[2] = '';

      通过下标操作符访问数组的元素, 下标从0开始计算,所以最大的下标== 数组的元素个数 - 1 ;  在使用的是有要注意不能越界。

    数组越界容易引起一些奇怪的错误。

    3、数组元素的初始化

      在定义数组的时候可以同时初始化数组中的元素。如下所示:

      int  iArray[3] = {10,2,3};  这样就定义了一个整型数组,数组有三个元素,三个元素初始化为10、2、3。 即 iArray[0] = 10;

    iArray[1] = 2; iArray[2] = 3;  这里用{ }的括起来的3个数字,称为初始列表。

      如果提供初始列表那么可以省略定义数组的长度。例如:

      int iArray[ ] = {10, 2, 3} ;   这样定义了一个整型数组,数组的长度为3。

      char chArray[] = "volcanol";  这样定义了一个字符型数组,数组的长度为9;  这里只有8个字符, 为什么会有9个元素呢,这是因为

    字符串字面值在系统中默认会自动添加一个 null 字符, 就是 '' ; 为了添加一个存储''的元素,所以最终会有9个数组元素。

      还有一种情况:

      int iArray[5] = {1, 2, 3} ;  这里定义了一个数组,可以存放5个元素, 但是初始化列表只提供了3个元素,还少2个元素, 这里就会有

    iArray[0] = 1,  iArray[1] = 2;  iArray[2] = 3, iArray[3] = 0 , iArray[4] = 0; 

    要点:如果不提供初始化值,那么数组元素的值就和普通变量一样

      1、全局数组如果是内置类型,则初始化话为0.

      2、局部数组如果是内置类型,则会得到随机值。

      3、如果数组是类类型,则会调用默认构造函数来初始化。如果没有默认构造函数,则必须为数组元素提供显示初始化列表。

    4、数组的访问

      前面说过数组和vector有点类似,而且可以通过下标访问。 

      下面来个实例:

    int main()
    {
        int iArray[10];
    
        for(int i=0; i != sizeof(iArray)/sizeof(int); i++)
            iArray[i] = i;
    
        for(int i= 0; i != sizeof(iArray)/sizeof(int); i++)
            cout<<iArray[i]<<endl;
    
        return 0;
    }

    这样就可以将 iArray数组的元素赋值为0到9;执行结果如下所示:

    [root@localhost cpp_src]# g++ test.cpp 
    [root@localhost cpp_src]# ./a.out 
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9

      要点, 在使用 sizeof操作符的时候,需要注意sizeof求的是占用的字节数,求出来的不是数组的长度。

    Exp:

    int main()
    {
        cout<<sizeof(L'a')<<endl;
    
        return 0;
    }

    程序执行结果如下所示:

    [root@localhost cpp_src]# g++ test.cpp 
    [root@localhost cpp_src]# ./a.out 
    4

      因此下面的程序段,需要注意:

    int iArray[10];
    
    for(int i = 0; i != sizeof(iArray); ++i )  //错误的理解 sizeof操作符, 从而到错误的结果, 这个地方需要注意
    
        iArray[i] = i ;

      

    5、数组下标越界

    int main()
    {
        string strArray[2];
    
        strArray[0] = "volcanol";
        strArray[1] = "hi,";
    
        cout<<strArray[1]<<strArray[2]<<endl;
    
        return 0;
    }

      这里我们越界访问啦,输出结果如下:

    [root@localhost cpp_src]# g++ test.cpp 
    [root@localhost cpp_src]# ./a.out 
    hi,DiƿLiƿh4��H�4iƿ~{L|������3��5�_4����ևDiƿP�@��3<iƿ+ 4�yƿ�yƿ�yƿ�yƿ�yƿ�yƿ≥Æ¿≥Æ¿P≥Æ¿␉≥Æ¿┌≥Æ¿/≠Æ¿_≠Æ¿Œ≠Æ¿Ì≠Æ¿æ≠Æ¿¶£Æ¿Î£Æ¿à£Æ¿û£Æ¿·Æ¿"·Æ¿6·Æ¿G·Æ¿Z·Æ¿·Æ¿•·Æ¿ ·Æ¿Á·Æ¿Î·Æ¿Ú·Æ¿<Æ¿^Æ¿┐Æ¿…Æ¿šÆ¿³Æ¿ÎÆ¿ØÆ¿         Ô  !    Р    ÿó«         ␍      4€                                  †
                                                                
                         {jƿi686[root@localhost cpp_src]#    

      这是读出,如果是写入的话, 必将导致程序错误,如果利用一些机制绕过系统的限制从用户空间跳到内核空间,那么就可能导致

    内核不稳定。

    6、数组不能直接直接赋值和复制

      与vector不同的是,数组不能直接整体的赋值和复制,这个需要注意。

      还有一个需要注意的问题。

    int main()
    {
        string strArray[2];
        
        strArray[0] = "volcanol";
        strArray[1] = "hi,";
    
        cout<<strArray[1]<<strArray[0]<<endl;
    
        return 0;
    }

    执行结果如下所示:

    [root@localhost cpp_src]# ./a.out 
    hi,volcanol

       这里我们看到  strArray[0]  可以整体的赋值为一个字符串字面值,为什么呢,这是因为数组的下标操作符返回的是左值, 而左值的

    数据类型是string所以就可以进行整体赋值了。

        

      数组就说到这,其他还有一些关于数组的东西,待续.................

  • 相关阅读:
    【Python基础编程196 ● 文件/文件夹操作 ● 文件的操作步骤】
    【Python基础编程197 ● 文件/文件夹操作 ● 文件的访问模式】
    【Python基础编程199 ● 文件/文件夹操作 ● Python怎么读/写很大的文件】
    【Python基础编程198 ● 文件/文件夹操作 ● 读取文件的4种方式】
    【等待优化】如何定位网络性能问题 ASYNC_NETWORK_IO 等待
    (4.48)sql server添加列并使用默认值填充已有记录
    【sql server安全】sql server列加密查询性能问题及解决方案
    【sql server安全】sql server使用混合密钥实现列加密
    【sql server安全】sql server使用非对称秘钥实现列加密
    【sql server安全】sql server使用对称秘钥实现列加密
  • 原文地址:https://www.cnblogs.com/volcanol/p/4004776.html
Copyright © 2011-2022 走看看