当前位置: 代码网 > it编程>编程语言>C/C++ > C语言数组从创建到内存存储的示例详解

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

2026年05月15日 C/C++ 我要评论
数组基础概念数组是存储固定数量同类型元素的数据结构,内存中连续存储,通过下标(从0开始)快速访问。声明与初始化示例int arr[5]; // 声明未初始化int nums

数组基础概念

数组是存储固定数量同类型元素的数据结构,内存中连续存储,通过下标(从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语言数组内存存储内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

  • C++文件流操作方式

    C++文件流操作方式

    引言在 c 语言中,文件操作依赖于file*和一系列函数(fopen、fread、fwrite、fprintf等)。这种方式虽然功能齐全,但存在类型不安全、容易... [阅读全文]
  • C++中的引用和inline 和 nullptr全面解析

    一.引用1.1引用的概念与定义引⽤不是新定义⼀个变量,⽽是给已存在变量取了⼀个别名,编译器不会为引⽤变量开辟内存空间, 它和它引⽤的变量共⽤同⼀块内存空间。⽐如:⽔壶传中李逵,宋江…

    2026年05月11日 编程语言
  • C++中锁的种类与使用实例详解

    C++中锁的种类与使用实例详解

    关于c++中锁的种类与使用optimized tool selectionc++ 标准库中有多种锁管理机制,各有不同的特性和适用场景:看这段代码中使用的是 st... [阅读全文]
  • C++数据结构排序算法详解

    C++数据结构排序算法详解

    一.基础排序算法1.冒泡排序(1)算法思想重复循环遍历,每次比较相邻的两个元素,如果前大于后就交换,这样每次最大的元素都会交换到最后,每次循环遍历时去掉最后的元... [阅读全文]
  • c++面向对象之对象的赋值详解

    c++面向对象之对象的赋值详解

    对象初始化:构造函数和复制构造函数在设计一个类时,往往要设计构造函数。一般对象的初始化使用构造函数初始化,如果没有构造函数则会使用默认构造函数。还可以用复制构造... [阅读全文]
  • C++ 配置文件管理神器 yaml-cpp 实战指南

    C++ 配置文件管理神器 yaml-cpp 实战指南

    在 c++ 项目开发中,配置管理是一个绕不开的话题。无论是服务端程序的端口监听、数据库连接池大小,还是游戏客户端的分辨率、音量设置,我们都不希望每次调整参数都需... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com