C 语言学习六:数组

数组

  • 数组简介
  • 一维数组
  • 二维数组
  • 变长数组

数组简介

所谓数组,就是一个集合,里面存放了相同类型的数据元素

  • 特点
    特点1:数组中的每个数据元素都是相同的数据类型
    特点2:数组是由连续的内存位置组成的
  • 注意
    数组名的命名规范与变量名命名规范一致,不要和变量重名
    数组中下标是从0开始索引
    如果{}内不足10个数据,剩余数据用0补全
    长度不明的数据无法定义

一维数组

  • 一维数组定义的三种方式:
    数据类型 数组名[ 数组长度 ];
    数据类型 数组名[ 数组长度 ] = { 值1,值2 ...};
    数据类型 数组名[ ] = { 值1,值2 ...};

  • 一维数组名称的用途

    1. 可以统计整个数组在内存中的长度
    2. 可以获取数组在内存中的首地址(数组首地址和数组中第一个元素地址相同)
    int main() {
    	//数组名用途
    	//1、可以获取整个数组占用内存空间大小
    	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    	cout << "整个数组所占内存空间为: " << sizeof(arr) << endl;
    	cout << "每个元素所占内存空间为: " << sizeof(arr[0]) << endl;
    	cout << "数组的元素个数为: " << sizeof(arr) / sizeof(arr[0]) << endl;
        
    	//2、可以通过数组名获取到数组首地址
    	cout << "数组首地址为: " << (int)arr << endl;
    	cout << "数组中第一个元素地址为: " << (int)&arr[0] << endl;
    	cout << "数组中第二个元素地址为: " << (int)&arr[1] << endl;
    	//arr = 100; 错误,数组名是常量,因此不可以赋值
    	return 0;
    }
    

二维数组

  • 二维数组定义的四种方式:
    数据类型 数组名[ 行数 ][ 列数 ];
    数据类型 数组名[ 行数 ][ 列数 ] = { {数据1,数据2 } ,{数据3,数据4 } };
    数据类型 数组名[ 行数 ][ 列数 ] = { 数据1,数据2,数据3,数据4};
    数据类型 数组名[ ][ 列数 ] = { 数据1,数据2,数据3,数据4};

    建议:以上4种定义方式,利用第二种更加直观,提高代码的可读性

    //方式2 
    	//数据类型 数组名[行数][列数] = { {数据1,数据2 } ,{数据3,数据4 } };
    	int arr2[2][3] =
    	{
    		{1,2,3},
    		{4,5,6}
    	};
    
    	//方式3
    	//数据类型 数组名[行数][列数] = { 数据1,数据2 ,数据3,数据4  };
    	int arr3[2][3] = { 1,2,3,4,5,6 }; 
    
    	//方式4 
    	//数据类型 数组名[][列数] = { 数据1,数据2 ,数据3,数据4  };
    	int arr4[][3] = { 1,2,3,4,5,6 };
    

    在定义二维数组时,如果初始化了数据,可以省略行数

  • 二维数组数组名
    查看二维数组所占内存空间、获取二维数组首地址

    int main() {
    
    	//二维数组数组名
    	int arr[2][3] =
    	{
    		{1,2,3},
    		{4,5,6}
    	};
    
    	cout << "二维数组大小: " << sizeof(arr) << endl;
    	cout << "二维数组一行大小: " << sizeof(arr[0]) << endl;
    	cout << "二维数组元素大小: " << sizeof(arr[0][0]) << endl;
    
    	cout << "二维数组行数: " << sizeof(arr) / sizeof(arr[0]) << endl;
    	cout << "二维数组列数: " << sizeof(arr[0]) / sizeof(arr[0][0]) << endl;
    
    	//地址
    	cout << "二维数组首地址:" << arr << endl;
    	cout << "二维数组第一行地址:" << arr[0] << endl;
    	cout << "二维数组第二行地址:" << arr[1] << endl;
    
    	cout << "二维数组第一个元素地址:" << &arr[0][0] << endl;
    	cout << "二维数组第二个元素地址:" << &arr[0][1] << endl;
    	return 0;
    }
    

    二维数组名=这个数组的首地址=这个数组第一个元素的首地址=这个数组第一行元素的首地址

变长数组

  • 定义与声明

    // 声明一个变长数组
    int size = 5;
    int array[size];
    
    // 动态指定数组长度
    int size;
    printf("Enter array size: ");
    scanf("%d", &size);
    int array[size];
    
    
  • 变长数组可以在声明时初始化,也可以在后续的代码中进行初始化

    int size = 3;
    int array[size] = {1, 2, 3};
    
  • 变长数组在全局作用域中声明

    // 错误的使用方式
    int size = 5;
    int globalArray[size];  // 错误,变长数组不能在全局作用域声明
    
    // 正确的使用方式
    #define ARRAY_SIZE 5
    int globalArray[ARRAY_SIZE];
    

你可能感兴趣的:(c语言,学习,c++,开发语言)