• 一维数组和二维数组的使用(int类型)


    导读

    本篇主要讲解一维数组和二维数组的创建和使用,还它们在内存中的存储
    学习完数组之后我们可以来实现一个基于数组制作的小游戏——三子棋

    1. 一维数组

    一维数组是数组中最简单的,它的元素只需要用数组名加一个下标,就能唯一地确定。

    1.1 一维数组的创建

    数组是一组相同类型元素的集合。
    数组的创建方式:

    type_t arr_name [const_n];
    //type_t 是指数组的元素类型
    //const_n 是一个常量表达式,用来指定数组的大小

    实例:

    int arr1[10];
    char arr3[10];
    float arr4[1];
    double arr5[20];
    
    • 1
    • 2
    • 3
    • 4

    注意:
    常量表达式中可以包含常量和符号常量,如 “ int a[3+5] ”是合法的。不能包含变量,如:

     int count = 10;
     int arr2[count];
    
    • 1
    • 2

    数组创建,在C99标准之前,[]中要给一个常量才可以,不能使用变量。在C99标准支持了变长数
    组的概念。

    1.2 数组的初始化

    数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)

    int arr1[10] = {1,2,3};
    //前三个元素赋值,系统自动给后面的数初始化为0
    int arr2[] = {1,2,3,4};
    //花括号中有4个数,虽然没有在方括号中指定数组长度,但是系统会根据花括号中数据的个数确定
    int arr3[5] = {1, 2, 3, 4, 5};
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1.3 一维数组的使用

    对于数组的使用我们之前介绍了一个操作符:[],下标引用操作符。它其实就数组访问的操作符。

    int main()
    {
    	int arr[10] = { 0 };//数组的不完全初始化
       //计算数组的元素个数
    	int sz = sizeof(arr) / sizeof(arr[0]);
    	//数组的大小可以通过计算得到。
    	//对数组内容赋值,数组是使用下标来访问的,下标从0开始。所以:
    	int i = 0;//做下标
    	for (i = 0; i < 10; i++)//这里写10,好不好?
    	{
    		arr[i] = i;
    	}
    	//输出数组的内容
    	for (i = 0; i < 10; ++i)
    	{
    		printf("%d ", arr[i]);
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

    1.4 一维数组在内存中的存储

    接下来我们探讨数组在内存中的存储。

    int main()
    {
    	int arr[10] = { 0 };
    	int i = 0;
    	int sz = sizeof(arr) / sizeof(arr[0]);
    	for (i = 0; i < sz; ++i)
    	{
    		printf("&arr[%d] = %p\n", i, &arr[i]);
    		//打印地址
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述
    仔细观察输出的结果,我们知道,随着数组下标的增长,元素的地址,也在有规律的递增。
    由此可以得出结论:数组在内存中是连续存放的
    在这里插入图片描述

    2. 二维数组

    二维数组常称为矩阵。把二维数组写成行和列的排列形式,可以有助于形象化的理解二维数组的逻辑结构。

    2.1 二维数组的创建

    type_t arr_name [const_n][const_m];
    类型说明符 数组名[常量表达式1][常量表达式2]

    实例:

    int arr[3][4];
    char arr[3][5];
    double arr[2][4];
    
    • 1
    • 2
    • 3

    2.2 二维数组的初始化

    1. 可以将所有数据写在一个花括号内,按数组元素在内存中的排序对个元素赋值
    2. 分行给二维数组赋值
    3. 二维数组如果有初始化,行可以省略,列不能省略
    //数组初始化
    int arr[3][4] = {1,2,3,4};
    int arr[3][4] = {{1,2},{4,5}};
    int arr[][4] = {{2,3},{4,5}};
    
    • 1
    • 2
    • 3
    • 4

    2.3 二维数组的使用

    二维数组的使用也是通过下标的方式。

    int main()
    {
    	int arr[3][4] = { 0 };
    	int i = 0;
    	for (i = 0; i < 3; i++)
    	{
    		int j = 0;
    		for (j = 0; j < 4; j++)
    		{
    			arr[i][j] = i * 4 + j;
    		}
    	}
    	for (i = 0; i < 3; i++)
    	{
    		int j = 0;
    		for (j = 0; j < 4; j++)
    		{
    			printf("%d ", arr[i][j]);
    		}
    	}
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    在这里插入图片描述

    2.4 二维数组在内存中的存储

    像一维数组一样,这里我们尝试打印二维数组的每个元素。

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

    在这里插入图片描述
    通过结果我们可以分析到,其实二维数组在内存中也是连续存储的
    在这里插入图片描述

    博主有话说

    目前数组的讲解就到这里,后续的有关数组越界问题,字符数组,数组做函数参数等内容我们下次再继续,还有更多例题讲解

  • 相关阅读:
    DAST 黑盒漏洞扫描器 第四篇:扫描性能
    计算机毕业设计Java机票实时比价系统(源码+系统+mysql数据库+lw文档)
    深度学习·理论篇(2023版)·第004篇深度学习和概率论基础01:使用大白话举例说明条件概率独立概率+期望值方差+协方差+熵和平均编码长度的关系
    1339 - Ancient Cipher (UVA)
    C++ 学习(六)函数 及 函数的分文件编写
    38 方法区的演进细节
    Pytorch Advanced(三) Neural Style Transfer
    shell编程之命令替换
    【并发编程】- 线程池使用DiscardOldestPolicy策略、DiscardPolicy策略
    算法题:给定一个字符串,查找最长子字符串的长度
  • 原文地址:https://blog.csdn.net/qq_64818885/article/details/133467483