C语言:(第七章)数组

文章详细介绍了数组的概念,包括为何需要数组,以及如何通过下标访问数组元素。重点讲解了一维数组的定义、初始化和操作,如完全初始化、不完全初始化和动态分配。此外,还提到了二维数组的表示和应用,并指出多维数组实际上是一维数组的嵌套。示例代码展示了在VS2019中的运行结果,强调了指针在数组操作中的作用。
摘要由CSDN通过智能技术生成

7.1:定义

*为什么需要数组?

        1:为了模拟现实世界

        2:为了解决大量同类型数据的存储和使用问题

        3:数组通常被用来存储程序需要的数据

*要访问数组中的元素:通过使用数组下标数(也称为索引)表示数组中的各元素

7.2:分类

        7.2.1:一维数组

怎样定义一维数组?

        -为n个变量连续分配存储空间

        -所有的变量数据类型必须相同

        -所有变量所占的字节大小必须相等

        例子:int a[5]    //int是数据类型,a是数组名,5是下标

有关一维数组的操作

(1)初始化

① 完全初始化

​ int a[5] = {1,2,3,4,5};

②不完全初始化:未被初始化的元素自动为零

​ int a[5] = {1,2,3};

③不初始化:所有元素都是垃圾值

​ int a[5];

④清零

​ int a[5] = {0};

⑤如果初始化数组时省略方括号中的数字,编译器会初始化列表中的项数来确定数组的大小

/*
时间:2022年10月17日14:01:23
目的:使用数组求每个月的天数
*/
#include<stdio.h>
int main(void) {
    const int days[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    //如果初始化数组时省略方括号中的数字,编译器会根据初始化列表中项数来确定数组的大小
    //将数组设置为只读(程序只能从数组中检索值,不能把新值写入数组)
    //要创建只读数组,应该用const声明和初始化数组
    int index;
    for (index = 0; index < sizeof days; index++)
        //sizeof运算符给出它的运算对象的大小(以字节为单位)
        printf("Month %2d has day %2d\n days.", index + 1, days[index]);
    return 0;
}
/*
时间:2022年3月23日11:40:13
目的:数组的用法
*/
#include<stdio.h>
int main(void)
{
    int a[5] = { 1,2,3,4,5 };
    //a是数组的名字,5表示数组元素的个数,并且这5个元素分别用a[0],a[1],...,a[4]表示
    int i;
​
    for (i = 0; i < 5; ++i)
        printf("%d\n",a[i]);
    return 0;
}
/*
在vs2019中的输出结果
~~~~~~~~~~~
1
2
3
4
5
~~~~~~~~~~~
*/
/*
时间:2022年4月1日13:56:34
目的:确定一个一维数组需要几个参数
*/
#include<stdio.h>
//f函数可以输出任何一个一维数组的内容
void f(int * pArr,int len)  //pArr首地址,len长度
{
    int i;
    for (i = 0; i < len; ++i)
        printf("  %d  ",  *(pArr+i));   //*(pArr+i)等价于 pArr[i],也等价于 b[i],也等价于 *(b+i);
    printf("\n");
}     
int main(void)
{
    int a[5] = { 1,2,3,4,5 };
    int b[6] = { 1,2,3,4,5,6 };
    int c[100] = { 22,31,20,10 };
    f(a,5);  //a是int *
    f(b,6);
    f(c,4);
    printf(" %d\n ",c[2]);
    return 0;
}   
/*
在vs2019中的输出结果
~~~~~~~~~~~~~~~~~~~~~~~~~
  1    2    3    4    5
  1    2    3    4    5    6
  22    31    20    10
  20
~~~~~~~~~~~~~~~~~~~~~~~~~
总结:指针可以快速传递数据
*/
/*
时间:2022年4月5日09:13:08
目的:动态一维数组的使用
*/
#include<stdio.h>
#include<malloc.h>
int main(void)
{
    int a[5];   //如果int占四个字节的话,则本数组总共包含20个字节,每四个字节被当做一个int变量来使用
    int len;
    int* pArr;
    int i;
​
    //动态的构造一维数组
    printf("请输入你要存放的元素的个数:");
    scanf_s("%d", &len);
    pArr = (int*)malloc(4 * len);    //本行动态的构造了一个一维数组,该数组的数组名是pArr,每个元素是int类型;类似于:int pArr[len];
​
    //对一维数组进行操作
​
    //对动态一维数组进行赋值
    for (i = 0; i < len; ++i)
        scanf_s("%d", &pArr[i]);
    //对一维数组进行输出
    printf("一维数组的内容是:\n");
    for (i = 0; i < len; ++i)
        printf("%d\n", pArr[i]);
    free(pArr);   //释放掉动态分配的数组
    return 0;
}
/*
在vs2019中的输出结果
~~~~~~~~~~~~~~~~~~~~
请输入你要存放的元素的个数:5
20 31 10 30 24
一维数组的内容是:
20
31
10
30
24
~~~~~~~~~~~~~~~~~~~~
总结:。。。
*/

error writing

​ int a[5] = {1,2,3,4,5};

​ int b[5];

如果要把a数组中值全部赋值给b数组

​ 错误的写法

b = a; //error

​ 正确的写法

for (i=0;i<5;++i)

b[i] = a[i];

(2)赋值

(3)排序

(4)求最大、最小值

(5)倒置

(6)查找

(7)插入

(8)删除

        7.2.2:二维数组

​ int a[3][4];

总共是12个元素,可以当做3行4列看待

/*
时间:2022年3月24日09:07:17
目的:对二维数组的应用
*/
#include<stdio.h>
int main(void)
{
    int a[3][4] = {
                    {1,  2,  3,  4},
                    {5,  6,  7,  8},
                    {9,  10,  11,  12}
                };
    int i, j;
    //输出数组内容
    for (i = 0; i < 3; ++i)
    {
        for (j = 0; j < 4; ++j)
            printf("%-5d", a[i][j]);    //-表示左对齐;5表示占据5个光标
        printf("\n");
    }
    return 0;
}
/*
在vs2019中的输出结果
~~~~~~~~~~~~~~~~~~~~~~~
1    2    3    4
5    6    7    8
9    10   11   12
~~~~~~~~~~~~~~~~~~~~~~~
总结:。。。
*/

        7.2.3:多维数组(不存在,因为内存是线性一维的;n维数组可以当做每个元素是(n-1)维数组的一维数组)

eg:

int a[3][4];

​         该数组是含有三个元素的一维数组,只不过每个元素都可以再分成4个小元素

Int a[3][4][5];

​         该数组是含有三个元素的一维数组,只不过每个元素都是4行5列的二维数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值