• 一维数组、二维数组学习内容


    1.数组创建

    用:类型名 __数组名称__[  常量表达式  ]

    其中常量表达式表示元素个数(数组长度),下标从0开始。

    例如:int arr[10];  //创建一个数组,存放整型元素,放10个元素

             char arr[5];  //创建一个数组,存放字符型,存五个字符

    常量表达式不能用“变量替换并给变量赋值”的方法,即:

    int num=10; int arr[num];  这种是错误的!

    2.数组初始化

    int arr[10]={1,2,3};  //不完全初始化,存放了123三个整型数字,数组长度为10,其余默认为0

    char arr1 [5]={'a','b','c','d','e'};    //存放了五个字符,98—‘b’,里面如果写{‘a’,98}等同于{‘a’,‘b’}

    char arr2 [5]="abc" ;    //存放的是a、b、c、\0  四个字符

    也可以不指定数组大小,由给出的元素个数确定数组长度

    例如:int arr[] = {1,2,3,4,5} ; //5个元素

               char arr3 [] = "abcd" ;   //5个元素:a、b、c、d、\0

    sizeof和strlen:

    printf("%d",sizeof(arr3)); 求出为5,计算arr(变量、数组、类型)所占空间的大小,字符包括\0,使用时不用引用头文件,只是个操作

    printf("%d", strlen(arr3))  ;求出为4,strlen只计算字符串的长度,到\0停止,使用时需要引用头文件

    3.数组访问

    用到数组访问的操作符——下标引用操作符:[ ],用来找数组的下标,下标从0开始

    1. #include
    2. int main()
    3. {
    4. char arr[]="abcde";
    5. int sz=sizeof(arr)/sizeof(arr[0]);//求数组的大小
    6. int i=0;
    7. for(;i
    8. printf("%c ",arr[i]);
    9. return 0;
    10. }

     4.一维数组在内存中的放置

    取地址用%p

    1. #include
    2. int main()
    3. {
    4. int arr[]={1,2,3,4,5,6,7,8,9};
    5. int sz=sizeof(arr)/sizeof(arr[0]);
    6. int i=0;
    7. for(;i
    8. {
    9. printf("arr[%d]=%p\n ",i,&arr[i]);//取数组的地址%p并打印,看存储在哪里
    10. }
    11. return 0;
    12. }

    得到的结果为:

    arr[0]=0x7ffd0d8adee0

    arr[1]=0x7ffd0d8adee4

    arr[2]=0x7ffd0d8adee8

    arr[3]=0x7ffd0d8adeec

    arr[4]=0x7ffd0d8adef0

    arr[5]=0x7ffd0d8adef4

    arr[6]=0x7ffd0d8adef8

    arr[7]=0x7ffd0d8adefc

    arr[8]=0x7ffd0d8adf00

     看出,一维数组在内存中是连续存放,每次间隔4,即4个字节一个数字

    5.二维数组创建和初始化

    创建:创建和一维数组相似,需要:类型、数组名和数组长度,但是数组长度是二维:行列都有

    例如: int arr [3][4] ;  //三行四列的二维数组

    初始化:int arr [3] [4] ={1,2,3,4,5} ; //依次填充第一行向第二行继续填充,不完全初始化,其余为0

    int arr [3][4]={{1,2,3},{4,5}} ;//这种用每行作为一个一维数组表示,该数组表示两行,不完全初始化

    初始化时不能省略列的个数,可以省略行的个数,int arr [ ][2]={{1,2},{3,4}} ;

    使用:用下标访问,从0开始

    1. #include
    2. int main()
    3. {
    4. int arr[3][4]={{1,2,3},{4,5}};
    5. int i=0;//行
    6. for(;i<3;i++)
    7. {
    8. int j=0;//列
    9. for(;j<4;j++)
    10. printf("%d ",arr[i][j]);
    11. printf("\n");
    12. }
    13. return 0;
    14. }

    结果为:

    1 2 3 0 
    4 5 0 0 
    0 0 0 0  

    在内存中的存储:

    1. #include
    2. int main()
    3. {
    4. int arr[3][4]={{1,2,3},{4,5}};
    5. int i=0;//行
    6. for(;i<3;i++)
    7. {
    8. int j=0;//列
    9. for(;j<4;j++)
    10. printf("arr[%d] [%d]=%p\n",i,j,&arr[i][j]);
    11. }
    12. return 0;
    13. }

    结果为:

    arr[0] [0]=0x7ffcca237b60
    arr[0] [1]=0x7ffcca237b64
    arr[0] [2]=0x7ffcca237b68
    arr[0] [3]=0x7ffcca237b6c
    arr[1] [0]=0x7ffcca237b70
    arr[1] [1]=0x7ffcca237b74
    arr[1] [2]=0x7ffcca237b78
    arr[1] [3]=0x7ffcca237b7c
    arr[2] [0]=0x7ffcca237b80
    arr[2] [1]=0x7ffcca237b84
    arr[2] [2]=0x7ffcca237b88
    arr[2] [3]=0x7ffcca237b8c

     发现每个元素之间相差还是4,且第二行第一个元素和第一行第四个元素间相差也是4,所以可以得出结论是二维数组的存储是连续的,本质上是一维的

  • 相关阅读:
    3.2 Redis的持久化机制-RDB
    OpenCV4(C++)—— 图像连通域的详细分析
    mysql的分组group by
    STL--List--与正反向迭代器复写
    c++ 要求用户输入整数时的风险
    如何通过日志恢复被删除的数据
    『递归』整数划分
    STK12与Python联合仿真(一):环境搭建
    DOSBox设置段并执行代码-例2
    力扣刷题 day49:10-19
  • 原文地址:https://blog.csdn.net/GBQ1224/article/details/126289063