一文彻底搞明白C语言的数组
创作时间:
作者:
@小白创作中心
一文彻底搞明白C语言的数组
引用
1
来源
1.
https://developer.aliyun.com/article/1653494
数组是 C 语言中最基本和最重要的数据结构之一,它为存储一组相同类型的数据元素提供了一种便捷的方式,并允许我们通过索引来访问这些元素。
数组的定义
在 C 语言中,数组的定义遵循以下基本语法:
type arrayName[arraySize];
其中:
type
是数组元素的数据类型,可以是基本数据类型(如int
、float
、char
等),也可以是自定义的数据类型。arrayName
是数组的名称,它是一个标识符,遵循 C 语言中标识符的命名规则。arraySize
是一个正整数,表示数组中元素的数量,它必须是一个常量表达式。
例如,定义一个包含 10 个整数的一维数组可以这样写:
int myArray[10];
数组的初始化
数组根据初始化的形式不一样,分为2种:1.静态初始化 2.动态初始化
静态初始化
可以在声明数组的同时为其元素赋初值,这称为静态初始化。以下是一些静态初始化的例子:
// 完全初始化
int numbers[5] = {1, 2, 3, 4, 5};
// 部分初始化,未初始化的元素将被自动初始化为 0(对于静态存储持续时间)或未定义(对于自动存储持续时间)
int anotherArray[5] = {1, 2};
// 不指定数组大小,编译器会根据初始化元素的数量来确定数组大小
int autoSizedArray[] = {1, 2, 3, 4, 5};
动态初始化
在程序运行时,可以使用循环和赋值语句来动态初始化数组。例如:
#include <stdio.h>
int main() {
int dynamicArray[5];
for (int i = 0; i < 5; i++) {
dynamicArray[i] = i * 2;
}
return 0;
}
数组的存储
数组在内存中是连续存储的。
对于 int myArray[10]
这样的数组,元素 myArray[0]
存储在内存的某个位置,随后的元素 myArray[1]
存储在紧挨着 myArray[0]
的下一个位置,依此类推。元素之间的地址偏移量等于元素的大小(对于 int
类型,通常为 4 字节)。
可以使用 &
运算符来查看数组元素的地址:
#include <stdio.h>
int main() {
int array[5] = {10, 20, 30, 40, 50};
for (int i = 0; i < 5; i++) {
printf("Address of array[%d] is %p\n", i, (void*)&array[i]);
}
return 0;
}
数组的访问
使用索引可以访问数组中的元素,索引从 0 开始,最大索引为 arraySize - 1
。例如:
#include <stdio.h>
int main() {
int array[5] = {1, 2, 3, 4, 5};
// 访问数组元素
printf("The third element is %d\n", array[2]);
return 0;
}
数组的常用操作
遍历数组
使用 for
循环是遍历数组的最常见方法:
#include <stdio.h>
int main() {
int array[5] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {
printf("%d ", array[i]);
}
printf("\n");
return 0;
}
数组元素的修改
可以使用赋值语句修改数组元素:
#include <stdio.h>
int main() {
int array[5] = {1, 2, 3, 4, 5};
array[2] = 10; // 修改第三个元素
return 0;
}
数组作为函数参数
可以将数组作为函数的参数传递,但需要注意的是,数组作为参数时,实际上传递的是数组的首地址,因此在函数中修改数组元素会影响原数组。以下是一个示例:
#include <stdio.h>
// 函数声明
void printArray(int arr[], int size);
void modifyArray(int arr[], int size);

int main() {
int array[5] = {1, 2, 3, 4, 5};
printArray(array, 5);
modifyArray(array, 5);
printArray(array, 5);
return 0;
}
// 打印数组元素
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
// 修改数组元素
void modifyArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
arr[i] = arr[i] * 2;
}
}
热门推荐
老人电动轮椅怎么买更划算?3款热门车型对比,一篇教你避坑!
2025年卓越高中联盟八省联考研讨会召开,专家共议高考备考策略
揭秘灵魂深处的惊人秘密!你可能很难相信
世界银行发布评估发展中国家就业质量新方法
强势急升后波动回调 人民币汇率后续走势如何演绎
中国知识产权诉讼趋势分析:以中部地区为例
来陕西,品味油泼辣子的前世今生
细胞周期实验:从原理到操作,你需要知道的一切
什么是水上金叉?水上金叉在技术分析中的应用有哪些?
《上海证券报》专版聚焦中国核电发展新质生产力
中国工程院:数字化转型基本普及智能化升级战略突破——十五五智能制造推进的战略思考
AI人才回流潮:从“硅谷镀金”到“湾区筑梦”
涉春节档电影讨论,600个账号被禁言!是该还电影一个公平真诚的“评论区”
八极拳:从江湖绝技到“国术之王”
北宋“元佑通宝”金铜合金试铸币研究
原料药DMF注册申报中的技术审评一般流程
区块链技术在金融行业中的应用持续扩展
轻食减肥全攻略:从定义到制作,详解如何科学食用轻食
启发式在人工智能中的应用与挑战:如何影响决策与问题解决
李伟教授:逆全球化之下的中国何去何从
全面二胎政策时间表:中国二孩政策实施及影响分析
心脏神经官能症的表现和症状有哪些
焊缝射线探伤检测方法详解
南充高中文峰校区创新"室内韵律操":确保雨天也能完成两小时体育活动
细说韩国历任总统家族:一家五口俩总统、三代人缠斗、自称中国人后代...
EDA软件行业深度分析:全球竞争格局与中国机遇
新生儿发烧应对指南:家长必知的观察与护理技巧
猪油可以美容怎么用
柠檬酸钠在电镀行业有哪些应用?
美国空军重塑战略轰炸机队 核心关键过审