【手撕C语言基础】数组

  • (꒪ꇴ꒪ ),hello我是祐言
  • 博客主页:C语言基础,Linux基础,软件配置领域博主🌍
  • 快上🚘,一起学习!
  • 送给读者的一句鸡汤🤔:
  • 集中起来的意志可以击穿顽石!
  • 作者水平很有限,如果发现错误,可在评论区指正,感谢🙏

一、基本概念

        在C语言中,数组是同一种数据类型的连续元素的集合。我们可以通过一个索引来访问数组中的特定元素。

int a[5] = {1, 2, 3, 4, 5};  // 定义一个整型数组,包含5个元素
语法释义:

        “a”是数组名,即这片连续内存的名称;

        “[5]”代表这片连续内存总共分成5个相等的格子,每个格子称为数组的元素;

        “int”代表每个元素的类型,可以是任意基本类型,也可以是组合类型,甚至可以是数组;

         而“{ }”中的元素就是赋值。

 

二、数组元素的引用

        我们可以通过数组的索引来访问和修改数组的元素。索引从0开始,到数组长度-1结束。

int a[5] = {1, 2, 3, 4, 5};
int first = a[0];  // 访问第一个元素,结果为1
a[4] = 6;  // 修改第五个元素的值,现在a[4]的值为6

三、字符数组

        字符数组是一种特殊类型的数组,它用于存储字符串。我们通常在字符数组的末尾添加一个'\0'字符作为字符串的结束标记。

char str[6] = "Hello";  // 定义一个字符数组,存储字符串"Hello"

四、多维数组

        C语言支持多维数组。最常见的是二维数组。

int a[2][3] = {{1, 2, 3}, {4, 5, 6}};  // 定义一个2x3的二维数组

五、数组名的含义

        在C语言中,数组名是数组的第一个元素的地址。

数组名有两个含义:
        1.第一含义是:整个数组
        2.第二含义是:首元素地址
当出现以下情形时,那么数组名就代表整个数组:
        1.在数组定义中
        2.在sizeof运算表达式中
        3.在取址符&中
其他任何情形下,那么数组名就代表首元素地址。即:此时数组名就是一个指向首元素的指针。

int a[5] = {1, 2, 3, 4, 5};
printf("%p\n", a);  // 输出数组的地址
printf("%p\n", &a[0]);  // 输出第一个元素的地址,和上一行的输出相同

六、数组下标

        数组下标就是数组元素的索引,它从0开始。我们可以通过下标来访问数组的元素。

int a[5] = {1, 2, 3, 4, 5};
printf("%d\n", a[2]);  // 输出第三个元素,结果为3

要值得在注意的是:

七、字符串常量

        字符串常量是字符数组的一种,它是以'\0'字符结束的一系列字符。我们可以用双引号来定义一个字符串常量。

char *str = "Hello, world!";  // 定义一个字符串常量

        这里要强调一下计算字符串常量的长度时,还要计算上最后一位'\0'字符。

 

八、零长数组

        零长数组是C语言中的一种特殊结构,它在结构体定义中的大小为零。它常常用于柔性数组的实现。

        用途:放在结构体的末尾,作为可变长度数据的入口。

struct flex_array {
    size_t size;
    int array[0];  // 零长数组
};

九、变长数组

        变长数组是C99引入的一种新特性,它允许我们定义一个长度在运行时确定的数组。

void func(int n) {
    int a[n];  // 定义一个长度为n的变长数组
}

                变长数组仅仅指元素个数在定义时是变量,而绝非指数组的长度可长可短。实际上,不管是普通数组还是所谓的变长数组,数组一旦定义完毕,其长度则不可改变。

int len = 5;
int a[len]; // 数组元素个数 len 是变量,因此数组 a 是变长数组

int x = 2;
int y = 3;
int b[x][y]; // 数组元素个数 x、y 是变量,因此数组 b 是变长数组
int b[2][y]; // 数组元素个数 y 是变量,因此数组 b 是变长数组
int b[x][3]; // 数组元素个数 x 是变量,因此数组 b 是变长数组

        以上就是我们今天关于C语言数组的一些介绍与实例,希望对初学C语言的你有所帮助喔~

        更多C语言相关文章,关注专栏:

手撕C语言

📢写在最后

  • 今天的分享就到这啦~
  • 觉得博主写的还不错的烦劳 一键三连喔~
  • 🎉感谢关注🎉
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
C语言中,没有内置的ArrayList数据结构,但是我们可以通过使用指针和动态内存分配来实现类似ArrayList的功能。 下面是一个简单的示例代码,展示了如何在C语言中创建一个类似ArrayList的数据结构: ```c #include <stdio.h> #include <stdlib.h> typedef struct { int* data; // 存储数据的数组 int size; // 当前存储的元素个数 int capacity; // 数组的容量 } ArrayList; // 初始化ArrayList void init(ArrayList* list) { list->data = NULL; list->size = 0; list->capacity = 0; } // 向ArrayList中添加元素 void add(ArrayList* list, int element) { if (list->size == list->capacity) { // 如果数组已满,则扩展数组的容量 int newCapacity = (list->capacity == 0) ? 1 : list->capacity * 2; int* newData = (int*)realloc(list->data, newCapacity * sizeof(int)); if (newData == NULL) { printf("内存分配失败\n"); return; } list->data = newData; list->capacity = newCapacity; } list->data[list->size] = element; list->size++; } // 获取ArrayList中指定索引的元素 int get(ArrayList* list, int index) { if (index < 0 || index >= list->size) { printf("索引越界\n"); return -1; } return list->data[index]; } // 释放ArrayList占用的内存 void freeArrayList(ArrayList* list) { free(list->data); list->data = NULL; list->size = 0; list->capacity = 0; } int main() { ArrayList list; init(&list); add(&list, 10); add(&list, 20); add(&list, 30); printf("元素个数:%d\n", list.size); printf("第一个元素:%d\n", get(&list, 0)); printf("第二个元素:%d\n", get(&list, 1)); printf("第三个元素:%d\n", get(&list, 2)); freeArrayList(&list); return 0; } ``` 这段代码演示了如何使用指针和动态内存分配来创建一个类似ArrayList的数据结构。你可以通过调用`add`函数向ArrayList中添加元素,通过调用`get`函数获取指定索引的元素。在使用完ArrayList后,记得调用`freeArrayList`函数释放占用的内存。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

祐言QAQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值