杨凯做网站,wordpress 链接地址,民非企业网站建设费怎么记账,佛山市手机网站建设企业06- 数组的基础知识详细讲解
一、基本概念 一次性定义多个相同类型的变量#xff0c;并且给它们分配一片连续的内存。 int arr[5];1.1 初始化
只有在定义的时候赋值#xff0c;才可以称为初始化。数组只有在初始化的时候才可以统一赋值。 以下是一些示例规则#xff1a;
…06- 数组的基础知识详细讲解
一、基本概念 一次性定义多个相同类型的变量并且给它们分配一片连续的内存。 int arr[5];1.1 初始化
只有在定义的时候赋值才可以称为初始化。数组只有在初始化的时候才可以统一赋值。 以下是一些示例规则
int arr[5] {1,2,3,4,5}; // 定义并初始化数组
int arr[5] {1,2,3}; // 可以不完全初始化
int arr[5] {1,2,3,4,5,6,7,8,9}; // 错误但可以用越界初始化越界部分将被编译器舍弃
int arr[] {1,2,3,4,5,6,7,8,9}; // 可以未指定大小但有初始化大小为9
int arr[]; // 错误没有指定大小也没有初始化内存大小无法确定注意
数组在定义时必须确定其大小。中括号 [] 必须有数组的大小如果没有则必须初始化。
1.2 数组元素引用
存储模式一片连续的内存按照数据的类型进行分割成若干个大小相同的格子。
元素的下标与偏移量以数组开头为基础的偏移量数据类型大小。
int arr[5] {1,2,3,4,5}; // 定义并初始化数组printf(arr[0]:%d\n, arr[0]); // 输出第一个元素arr[0] 99; // 把数组的第1个元素偏移量为0修改为99printf(arr[0]:%d\n, arr[0]); // 输出修改后的第一个元素arr[5] 250; // 错误 越界访问可能造成非法访问
printf(arr[5]:%d\n, arr[5]); // 越界访问的输出arr {9,8,7,6,5,4}; // 错误整体赋值只允许在初始化中
arr 100; // 错误数组不能整体赋值为一个值printf(sizeof(arr):%ld\n, sizeof(arr)); // 输出数组的大小
int len sizeof(arr) / sizeof(int); // 求数组元素的个数for (size_t i 0; i len; i) {printf(arr[%ld]:%d\n, i, arr[i]); // 输出每个元素
}说明
sizeof(arr)获取数组占用的内存大小字节数。sizeof(int)获取单个元素的大小字节数。len计算数组元素的个数。
注意事项
数组的下标从0开始。越界访问数组会导致未定义行为可能导致程序崩溃或错误结果。数组整体赋值只能在初始化时进行不能在定义之后进行整体赋值。
二、字符数组
概念 专门用来存放字符类型数据的数组称为字符数组。
2.1 初始化引用
定义一个字符类型的数组并把’H’,‘e’,‘l’,‘l’,o’一个一个存进去
char ch1[5] {H, e, l, l, o};定义一个字符型的数组并把Hello字符串存放到数组中因此该数组为字符串数组
char ch2[6] {Hello};与ch2一样大括号可以省略
char ch3[6] Hello;修改字符数组中的某个元素
ch3[1] E; // 可以把数组中第二个元素‘e’修改为‘E’整体赋值只允许在初始化时进行
ch3 Even; // 不可以只有在初始化的时候才能整体赋值输出字符数组
printf(%s\n, ch1); // 在访问ch1的时候并没有发现结束符因此很有可能会把ch2的内容一并输出注意
字符数组的结束符 ch1 为字符数组但它没有结束符因此在打印输出的时候应该避免使用%s 进行输出否则可能会造成越界访问。字符串在C语言中以 \0 作为结束符确保字符数组输出安全。
char ch1[6] {H, e, l, l, o, \0}; // 加上结束符
printf(%s\n, ch1); // 现在可以安全地使用 %s 输出2.2 示例代码
#include stdio.hint main() {// 定义并初始化字符数组char ch1[5] {H, e, l, l, o};char ch2[6] {Hello};char ch3[6] Hello;// 修改字符数组中的某个元素ch3[1] E;// 正确的打印方式char ch1_with_terminator[6] {H, e, l, l, o, \0};printf(ch1 with terminator: %s\n, ch1_with_terminator);printf(ch2: %s\n, ch2);printf(ch3: %s\n, ch3);// 错误的打印方式printf(ch1 without terminator: %s\n, ch1); // 可能导致越界访问return 0;
}总结
字符数组 用来存放字符数据。初始化 时可以逐个字符赋值或使用字符串直接赋值。修改 数组元素可以通过索引访问。整体赋值 只能在初始化时进行。结束符 \0 确保字符串的安全输出。
三、数组小细节
3.1 数组未初始化
结论 当定义数组但未初始化时数组中的元素将包含内存中的随机值内存中原有的内容。
示例代码
#include stdio.hint main() {int arr[5];// 输出未初始化的数组元素for (int i 0; i 5; i) {printf(arr[%d] %d\n, i, arr[i]);}return 0;
}输出 可能会显示随机值因为数组未初始化时包含的是内存中的原有内容。
3.2 部分初始化
结论 部分初始化时已初始化部分是已知值未初始化的部分则为0。
示例代码
#include stdio.hint main() {int arr[5] {1, 2, 3}; // 部分初始化只初始化前三个元素// 输出部分初始化的数组元素for (int i 0; i 5; i) {printf(arr[%d] %d\n, i, arr[i]);}return 0;
}输出
arr[0] 1
arr[1] 2
arr[2] 3
arr[3] 0
arr[4] 0未初始化的元素自动设为0。
总结:
未初始化数组 包含随机值来源于内存中的原有内容。部分初始化数组 已初始化部分设定为指定值未初始化部分自动设为0。