数组

声明

和变量一样,要使用一个数组,必须先声明它

int test[6]; //表示变量test里有6个整型值

这里声明了一个名叫test的数组,int表示这个数组中的所有元素类型是整形。方括号中的6表示数组中有6个元素。
一旦定义了一个数组,系统将为它分配一个固定大小的空间,以后不能改变。
szdync.png

数组初始化

声明了数组之后,数组中的值是不确定的,有时候,我们希望在定义数组时就给它的元素赋值,那么可以在定义数组时通过使用以下方法进行赋值:
int test[6]={7,9,13,18,20,25};

这样数组中的元素的值就依次是7,9,13,18,20,25了。

例如

#include <stdio.h>
int main()
{
    char test[6];
    //数组名会自动转化为数组空间的首地址
    test[0] = 'A';  //*test = 'A'
    test[1] = 'B';  //*test = 'B'
    test[2] = 'C';
    test[3] = 'D';
    test[4] = 'E';
    test[5] = 'F';
    //数组是一种存储多个相同类型数据的数据结构
    //相对于之前用指针直接分配内存,数组这种方式使用更简单,不容易出错
    //数组的大小必须在定义数组时就确定,不可以通过变量来确定数组的大小

    printf("%s", test);

    //数组是储存在栈上
    //数组的内存空间不需要手动释放
    //因为栈的空间较小(1M/2M),所以数组不能定义的很大
    return 0;
}

对整数型数组的值进行排序

当你无法一部就达成目标时,就把大的目标分解成小目标
当你无法一开始就写出程序,那么你可以先用伪代码(中文)描述你准备要做的事
szpx.png
转换成代码如下

#include <stdio.h>
void swap(int* a, int* b) //此函数为了交换test[0]和与他相比较数的值
{
    int temp = *a;
    *a = *b;
    *b = temp;
}
int main()
{
    int test[6];
    test[0] = 32;
    test[1] = 59;
    test[2] = -125;
    test[3] = 125;
    test[4] = 27;
    test[5] = 95;
    //将数组int test[6];里最大的值找出
    if (test[0] < test[1]) swap(&test[0], &test[1]);//比较test[0]和test[1],如果test[1]比test[0]大,则交换他们的值
    if (test[0] < test[2]) swap(&test[0], &test[2]);//比较test[0]和test[2],如果test[2]比test[0]大,则交换他们的值
    if (test[0] < test[3]) swap(&test[0], &test[3]);//比较test[0]和test[3],如果test[3]比test[0]大,则交换他们的值
    if (test[0] < test[4]) swap(&test[0], &test[4]);//比较test[0]和test[4],如果test[4]比test[0]大,则交换他们的值
    if (test[0] < test[5]) swap(&test[0], &test[5]);//比较test[0]和test[5],如果test[5]比test[0]大,则交换他们的值
    /*
    这5个if循环,可以用一个for循环来进行简化
    for (int x = 5; x <= 5; x++)
    {
        if (test[0] < test[x]) swap(&test[0], &test[x]);
    }
    */
    printf("%d\n", test[0]);
    return 0;
}

使用for循环进行全部数值比较

#include <stdio.h>
void swap(int* a, int* b) //此函数为了交换test[0]和与他相比较数的值
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main()
{
    int test[6];
    test[0] = 32;  //*a=1;   数组名可以转换为数组第一个元素的地址
    test[1] = 59;
    test[2] = -125;
    test[3] = 125;
    test[4] = 27;
    test[5] = 95;
    //将数组int test[6];里的6个值按从大到小排序

    for (int x = 1; x <= 5; x++)
    {
        if (test[0] < test[x]) swap(&test[0], &test[x]);
    }

    for (int x = 2; x <= 5; x++)
    {
        if (test[1] < test[x]) swap(&test[1], &test[x]);
    }

    for (int x = 3; x <= 5; x++)
    {
        if (test[2] < test[x]) swap(&test[2], &test[x]);
    }

    for (int x = 4; x <= 5; x++)
    {
        if (test[3] < test[x]) swap(&test[3], &test[x]);
    }

    for (int x = 5; x <= 5; x++)
    {
        if (test[4] < test[x]) swap(&test[4], &test[x]);
    }
    /*------------------------------
    此处代码可再度套for循环进行精简
    for (int y = 1; y <= 5; y++)
    {
        for (int x = y; x <= 5; x++)
        {
            if (test[0] < test[x]) swap(&test[0], &test[x]);
        }
    }
    ------------------------------*/
    printf("%d    %d     %d    %d    %d    %d\n", test[0], test[1], test[2], test[3], test[4], test[5]);

    return 0;
}

结构体

数组是将相同类型的多项数据集合在一起的方式,而结构体是将多个不同类型的数据项集合到一起的方法。在此之前我们使用的整形,浮点型都是C语言的内置数据类型,一个变量只能存储一项数据类型,但很多时候我们需要把多项不同类型的数据合并成一个整体来操作。
例如,要存储一个人的基本信息,可以定义下面的变量:

char fullname[257]; //一个字符型数组用于存储姓名
char idno[32];      //一个字符型数组用于存储身份证号码
int age = 0;        //一个整型变量用于存储年龄
int gender = 1;     //一个整型变量用于表示性别(1 - 男, 2 - 女)

但这四个变量和数组在程序上是独立的,如果需要向一个函数传递一个人的信息,则这个函数需要有四个参数,会程序变得冗长。更麻烦的是,如果未来需要新增一个变量用于存储手机号码,这个函数就必须要增加一个参数,这样需要在程序中的很多地方进行修改。
因此,我们需要一种手段可以将多个关联的变量、数组【打包】成一个变量,这个变量分成多个部分,用于存储不同类型的信息。
这种变量,就是结构体变量。

定义结构体

要使用结构体变量,必须先来定义结构体,在声明结构体变量。
方法很简单,可以在main函数的前面加入它,也可以单独使用一个头文件来定义它,并且在你的程序中包含这个头文件。

struct IDinfo           //定义一个名叫IDinfo的结构体
{
    char fullname[257]; //一个字符型数组用于存储姓名
    char idno[32];      //一个字符型数组用于存储身份证号码
    int age = 0;        //一个整型变量用于存储年龄
    int gender = 1;     //一个整型变量用于表示性别(1 - 男, 2 - 女)
}; //注意大括号后面的分号;不能少,这是一条完整的语句。

//给结构体成员赋值
IDinfo.fullname = "张三";
IDinfo.idno = 123456;
IDinfo.age = 18;
IDinfo.gender = 1;

//读取结构体成员的值
printf("%s的身份证号是%d,年龄是%d岁\n", IDinfo.fullname, IDinfo.idno, IDinfo.age);

//使用typedef函数为这个新的结构起了一个别名,叫info_1
typedef struct IDinfo info_1;
//因此,现在你就可以像 int 和 double 那样直接使用info_1定义变量,代码如下
info_1 test1 = {"李四", 987654, 22, 2};
info_1 test2;
最后修改:2023 年 10 月 13 日
如果觉得我的文章对你有用,请随意赞赏