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