C语言数组从创建到内存存储的示例详解

 更新时间:2026年05月15日 09:27:22   作者:nbwenren  
在C语言中,数组是一种基本的数据结构,用于存储固定大小的相同类型元素的集合,本文给大家介绍C语言数组从创建到内存存储的相关知识,感兴趣的朋友跟随小编一起看看吧

数组基础概念

数组是存储固定数量同类型元素的数据结构,内存中连续存储,通过下标(从0开始)快速访问。

声明与初始化示例

int arr[5];               // 声明未初始化
int nums[3] = {1, 2, 3};  // 完全初始化
char str[] = "hello";     // 自动推导长度(包含'\0')

一维数组操作

遍历与输入输出

for (int i = 0; i < 5; i++) {
    scanf("%d", &arr[i]);  // 输入
    printf("%d ", arr[i]); // 输出
}

内存连续性验证

printf("%p\n", &arr[0]);  // 输出相邻地址差为sizeof(int)
printf("%p\n", &arr[1]);  // 如4字节(int类型)

二维数组

声明与遍历

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

内存布局
二维数组按行优先连续存储,matrix[0][2]matrix[1][0]地址相邻。

实用技巧

计算数组长度

int size = sizeof(arr) / sizeof(arr[0]);  // 适用于一维数组

二分查找实现

int binary_search(int arr[], int n, int target) {
    int left = 0, right = n - 1;
    while (left <= right) {
        int mid = left + (right - left) / 2;  // 防溢出
        if (arr[mid] == target) return mid;
        else if (arr[mid] < target) left = mid + 1;
        else right = mid - 1;
    }
    return -1;
}

常见错误

  • 下标越界:访问arr[5](声明为arr[5]时合法下标为0-4)。
  • 未初始化:直接读取int arr[10];的值是未定义的。
  • 变长数组限制:VLA(如int arr[n])不可初始化且部分编译器不支持。

应用场景

  • 字符串处理:字符数组存储文本,注意结尾'\0'
  • 数据批量处理:如传感器数据、游戏坐标等。
  • 算法优化:利用连续存储特性提升访问效率(如缓存命中)。

通过理解内存布局和下标机制,可高效操作数组并避免常见错误。

到此这篇关于C语言数组详解:从创建到内存存储的文章就介绍到这了,更多相关C语言数组内存存储内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用C语言实现动态数组Vector

    使用C语言实现动态数组Vector

    这篇文章主要为大家详细介绍了使用C语言实现动态数组Vector的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • string,CString,char*之间的转化

    string,CString,char*之间的转化

    下面是MFC/C++/C中字符类型CString, int, string, char*之间的转换的说明与举例,经常用的东西,相信对于用C/C++的朋友,还是比较有用的
    2013-03-03
  • 关于VS+QT5应用程序换图标的解决方案

    关于VS+QT5应用程序换图标的解决方案

    这篇文章主要介绍了VS+QT5应用程序换图标的处理方案,本文给大家提供了两种解决方案供大家参考,每种方法给大家讲解的都非常详细,需要的朋友可以参考下
    2021-12-12
  • QT6中读取文件的实现方法详解

    QT6中读取文件的实现方法详解

    QT6提供了多种读取文件的方式,这篇文章为大家详细介绍了几种常用的方法,包括处理文本文件和二进制文件,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-05-05
  • C/C++的内存管理你了解嘛

    C/C++的内存管理你了解嘛

    这篇文章主要为大家介绍了C/C++的内存管理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • C语言链表实现学生管理系统

    C语言链表实现学生管理系统

    这篇文章主要为大家详细介绍了C语言链表实现学生管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • C++访问std::variant类型数据的几种方式小结

    C++访问std::variant类型数据的几种方式小结

    std::variant是 C++17中引入的一个新的类模板,提供了一种存储不同类型的值的方式,本文主要介绍了C++访问std::variant类型数据的几种方式小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • C++中几种将整数转换成二进制输出的方法总结

    C++中几种将整数转换成二进制输出的方法总结

    下面小编就为大家带来一篇C++中几种将整数转换成二进制输出的方法总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • 基于C++输出指针自增(++)运算的示例分析

    基于C++输出指针自增(++)运算的示例分析

    本篇文章是对C++中输出指针自增(++)运算的示例进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++深入讲解引用的特点及与指针的区别

    C++深入讲解引用的特点及与指针的区别

    引用是C++一个很重要的特性,顾名思义是某一个变量或对象的别名,对引用的操作与对其所绑定的变量或对象的操作完全等价,这篇文章主要给大家总结介绍了C++中引用的相关知识点,需要的朋友可以参考下
    2022-05-05

最新评论