C语言数组

🌟 各位看官好,我是maomi_9526

🌍 种一棵树最好是十年前,其次是现在!

🚀 今天来学习C语言的相关知识。

👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更多人哦

目录

1. 数组的概念

2. 数组的创建与初始化

2.1 数组的创建

2.2 数组初始化

3. 数组的使用

3.1 数组下标

3.2 数组遍历

3.3 数组输入

4. sizeof运算符计算数组大小

5. 二维数组的创建与初始化

5.1 创建二维数组

5.2 数组初始化

6. 数组在内存中的存储

6.1 数组的内存存储

7. C99中的变长数组


1. 数组的概念

数组是一种数据结构,用于存储多个相同类型的元素。每个元素都通过一个下标进行索引。数组的大小在定义时固定,无法动态改变。数组的主要特点是存储空间连续且可以通过索引直接访问元素。

数组的特点:

  • 元素类型相同:数组中的所有元素必须是同一数据类型,例如,所有元素可以是intfloatchar等。
  • 内存连续性:数组在内存中是连续存储的,因此可以通过计算偏移量快速访问。
  • 索引从0开始:数组的下标从0开始,元素位置为arr[0]arr[1],直到arr[n-1],其中n是数组的大小。

数组的优点

  • 随机访问:可以通过下标快速访问数组的任意元素。
  • 空间连续性:由于数组在内存中是连续存储的,这使得数组的访问速度较快。
#include <stdio.h>
 
int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    printf("第一个元素: %d\n", arr[0]); // 输出 1
    printf("第三个元素: %d\n", arr[1]); // 输出 2
    return 0;
}

2. 数组的创建与初始化

2.1 数组的创建

数组的创建需要指定其类型和大小。大小通常是一个常量值,且在创建数组时就必须确定。

数组声明语法:

type arr_name[size];

其中:

  • type为数组元素的类型(例如intfloat等)。
  • arr_name是数组的名字,通常采用有意义的名称。
  • size是数组的大小,指定数组可以容纳多少个元素。

实例

int arr[10];  // 声明一个包含10个整数的数组
2.2 数组初始化

数组初始化是指在声明数组时同时为其元素赋予初值。可以选择完全初始化、部分初始化或不初始化。

  • 完全初始化:在声明时为每个元素赋一个初值。
int arr[5] = {1, 2, 3, 4, 5};
  • 不完全初始化:未明确赋值的元素会自动初始化为零。
int arr[6] = {1};  // arr[0] = 1,其他为0
  • 初始化错误:如果给数组初始化的元素超过了数组的大小,就会发生错误。
int arr[3] = {1, 2, 3, 4};  // 错误:元素过多

实例

#include <stdio.h>

int main() {
    int arr[5] = {1, 2};  // 初始化前两个元素,其他为0
    for (int i = 0; i < 5; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

输出:

1 2 0 0 0

3. 数组的使用

3.1 数组下标

数组下标是从0开始的整数,arr[0]表示数组的第一个元素,arr[1]表示第二个元素,以此类推。可以通过数组下标直接访问数组中的元素。

示例

int arr[5] = {1, 2, 3, 4, 5};
printf("%d\n", arr[3]); // 输出 4
3.2 数组遍历

可以使用for循环遍历数组并打印每个元素。数组的大小可以通过手动指定或使用sizeof来计算。

示例

#include <stdio.h>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    for (int i = 0; i < 5; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

输出:

1 2 3 4 5
3.3 数组输入

可以通过scanf函数为数组中的每个元素赋值。注意,在输入数据时需要确保输入的类型与数组元素类型一致。

示例

#include <stdio.h>

int main() {
    int arr[5];
    printf("请输入5个整数:\n");
    for (int i = 0; i < 5; i++) {
        scanf("%d", &arr[i]);
    }
    printf("你输入的数组是: ");
    for (int i = 0; i < 5; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

4. sizeof运算符计算数组大小

sizeof是C语言中的一个运算符,可以用于获取数组或类型的大小。通过sizeof,可以计算数组的总大小并确定数组中元素的个数。

计算数组元素个数:

#include <stdio.h>

int main() {
    int arr[10] = {0};
    int num_elements = sizeof(arr) / sizeof(arr[0]);
    printf("数组元素个数: %d\n", num_elements);
    return 0;
}

输出:

数组元素个数: 10

5. 二维数组的创建与初始化

5.1 创建二维数组

二维数组是一个包含多个一维数组的数组。创建二维数组时,需要指定行数和列数。数组元素通过两个下标来访问,分别表示行和列。

二维数组的声明语法:

type arr_name[行数][列数];

实例

int arr[3][4];  // 创建一个3行4列的二维数组
5.2 数组初始化
  • 完全初始化
int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
  • 按行初始化
int arr[2][3] = {{1, 2}, {3, 4}};
  • 省略行数
int arr[][3] = {{1, 2, 3}, {4, 5, 6}};

示例

#include <stdio.h>

int main() {
    int arr[2][3] = {{1, 2, 3}, {4, 5, 6}};
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

输出:

1 2 3 
4 5 6 

6. 数组在内存中的存储

6.1 数组的内存存储

数组的元素在内存中是连续存储的,这意味着数组中元素的内存地址是连续的,且每个元素所占内存大小相同。数组的内存地址是通过数组名来间接访问的。

一维数组的内存布局:

  • 数组的每个元素都位于内存中的相邻位置,元素之间的地址差等于每个元素的大小。
  • 例如,对于一个int类型的数组,若每个元素占4字节,那么每两个元素之间的地址相差4字节。

示例

#include <stdio.h>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    for (int i = 0; i < 5; i++) {
        printf("arr[%d] 的地址: %p\n", i, (void*)&arr[i]);
    }
    return 0;
}

二维数组的内存布局:

  • 二维数组在内存中也是按行连续存储的。首先存储第一行的所有元素,然后存储第二行,以此类推。

7. C99中的变长数组

C99标准引入了变长数组(VLA),允许在程序运行时动态确定数组的大小。这种特性增强了数组的灵活性,使其能够根据用户输入或运行时条件确定大小。

变长数组的特点:

  • 数组的大小在运行时确定,而不是在编译时。
  • 变长数组的大小必须在栈内存中分配,因此大小不能过大。

示例

#include <stdio.h>

int main() {
    int n;
    printf("请输入数组大小: ");
    scanf("%d", &n);
    int arr[n];  // 数组大小由用户输入决定
    for (int i = 0; i < n; i++) {
        arr[i] = i + 1;
    }
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值