【C语言】数组知识点总结

致读者:

在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中,数组属于构造数据类型。



数组:一组有序数据集合,且其中的元素都属于同一数据类型(type_t arr_name [const_n];),利用数组名和下表唯一确定数组中的元素

1.数组的创建和初始化

创建数组方式:

一维数组:

 
 
type_t  arr_name [const_n];  
//type_t  是数组元素的类型  
//arr_name  是数组名  
//const_n 是数组元素的个数,用来指定数组的大小,即整形表达式。
int arr[10] = {0};//创建一个一维整型数组,包括十个数组元素。

二维数组:

type_t  arr_name [const_n][const_n];  
//type_t  是数组元素的类型  
//arr_name  是数组名  
//const_n 是数组元素的个数,用来指定数组的大小,即整形表达式。
int arr[3][4] = {0};//创建一个二维整型数组,包括十个数组元素。

初始化数组方式:

普通方式:

int arr[10] = {0,1,2,3,4,5,6,7,8,9};

int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};

函数方式<一维数组>:

#include <stdio.h>  
void initarr(int arr[], int sz)   
{  
    int i = 0;  
    for (i=0; i<10; i++)  
    {  
        arr[i] = i;  //给数组初始化为i 
    }  
}  
  
void printarr(int arr[], int sz)   
{  
    int i = 0;  
    for (i=0; i<10; i++)  
    {  
        printf("%d ", arr[i]);//打印数组  
    }  
}  
int main()  
{  
    int arr[10] = {0}; //创建整型数组arr,元素为10个  
    initarr(arr, 10); //数组初始化函数  
    printarr(arr, 10);//打印数组函数  
    return 0;  
}  

结果所示:


扫描二维码关注公众号,回复: 560056 查看本文章

二维数组函数初始化方法同一维数组函数初始化。

2.数组的引用

数组的使用是通过数组元素的下标来对数组元素进行调用。

一维数组引用代码如下:

#include <stdio.h>  
int main()  
{  
    int arr[10] = {0};  
    int i = 0;  
    for (i = 0; i < 10; i++)  
    {  
        arr[i] = i;  
    }  
    for (i = 9; i >= 0; i--)  
    {  
        printf("%d ", arr[i]);  
    }  
    return 0;  
}  

结果所示:

二维数组使用也是通过元素下标的方式,代码如下:

#include <stdio.h>  
  
int main()  
{  
    int arr[3][4] = {0};  
    int i = 0;  
    int j = 0;  
    for (i = 0; i < 3; i++)  
    {  
        for (j = 0; j < 4; j++)  
        {  
            arr[i][j] = i * 4 + j + 1;  
        }  
    }  
    for (i = 0; i < 3; i++)  
    {  
        for (j = 0; j < 4; j++)  
        {  
            printf("%d ",arr[i][j]);  
        }  
    }  
    return 0;  
}  

结果所示:


3.数组在内存当中的存储:

一维数组:

#include<stdio.h>  
int main()  
{  
  int arr[10] = { 0 };  
  int i = 0;  
  for (i = 0; i < 10; i++)  
  {  
    arr[i] = i;  }
    for (i = 0; i < 10; i++)  
    {  
    printf("&arr[%d] = %p\n", i, &arr[i]);//打印数组每个元素的地址  
    }
    return 0;  
}  

结果所示: 

  

   

二维数组:

#include <stdio.h>  
int main()  
{  
    int arr[3][4] = {0};  
    int i = 0;  
    int j = 0;  
    for (i = 0; i < 3; i++)  
    {  
        for (j = 0; j < 4; j++)  
        {  
            arr[i][j] = i * 4 + j + 1;  
            printf("&arr[%d][%d]=%p \n", i, j, &arr[i][j]);  
        }  
    }  
    return 0;  

结果所示:



综上分析:

无论是一维还是二维数组,都是随着数组元素下标的增加,数组元素在内存当中的地址也是递增的。
再看其在内存中的存储方向,都是由低地址到高地址。
由此,我们可推断出,数组元素在内存当中的存储是连续的,其存储方向为由低地址指向高地址

4.数组的指针访问

一维数组的指针访问,创建代码如下:

#include <stdio.h>  
  
int main()  
{  
    int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };  
    printf("%p\n", arr);  
    printf("%d\n", *arr);  
    return 0;  
}  

结果所示:


综上:数组名所代表的是数组首元素的地址。

#include <stdio.h>  
int main()  
{  
    int arr[] = { 1, 2 ,3 ,4 , 5 };  
    printf("%d\n", sizeof(arr));  
    printf("%d\n", sizeof(arr + 0));  
    printf("%d\n", sizeof(*arr));  
    printf("%d\n", sizeof(arr[1]));  
    printf("%d\n", sizeof(&arr));  
    printf("%d\n", sizeof(&arr+1));  
    printf("%d\n", sizeof(&arr[0]));  
    printf("%d\n", sizeof(&arr[0]+1));  
    return 0;  
}  

结果所示:


综上:

数组名所代表的是数组首元素的地址。
而数组名代替整个数组(即不作为指针常量)的时候只有两种情况:
1. sizeof(数组名)   2. &数组名
只有这两种情况下,数组名才代替整个数组。

二维数组指针访问同上。

5.数组作为函数参数

在面对大量数据的处理时,有时不仅仅是要创建数组,更要将数组作为函数的参数进行相应的运算。
参数等价: int arr[]  <==>int *arr;
#include <stdio.h>   
int LenTh(int arr[])  
{  
    int sz = sizeof(arr) / sizeof(arr[0]);  
    return sz;  
}  
  
int main()  
{  
    int arr[] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };  
    int ret = 0;  
    ret =LenTh(arr);  
    printf("%d\n", ret);  
    return 0;  
}  

结果所示:

综上:

数组在作为函数参数传参时,传过去的是数组的首元素的地址,而不是整个数组。
而首元素地址为4个字节,地址也为四个字字节(32位仪器中),因此求出sz为1,其输出为1。
数组作为可以包含大量数据的集合,可以有效的处理大批量的数据,因此应用相当广泛。

因知识浅薄,我只是对数组及其应用做了简单的介绍,不当之处,望以斧正。

猜你喜欢

转载自blog.csdn.net/qq_41035588/article/details/79915673