1. 一维数组的创建和初始化
数组的初始化是指,在创建数组的同时给数组的内容一些合理初始值(初始化)。
/*strlen:只与字符串有关系,用来求字符串的长度,是一个库函数,需要引入头文件sizeof:计算变量、数组、类型的大小,单位是字节,是一个操作符*/char arr4[] = "abcefg";//strlen:计算字符串的长度printf("strlen:%d\n", strlen(arr4));//6//sizeof:计算字符串所占用的空间printf("sizeof:%d\n", sizeof(arr4));//7
2. 一维数组的使用
- 数组是使用下标来访问的,下标是从0开始。
2. 数组的大小可以通过计算得到。//两种遍历数组的方式#include<stdio.h>#include<string.h>int main() {/*char arr1[] = "abcdef";for (int i = 0; i < strlen(arr1); i++) {printf("%c",arr1[i]);}return 0;*/char arr2[] = { 'a','b','c','d','e','f' };int len = sizeof(arr2) / sizeof(arr2[0]);for (int i = 0; i < len; i++) {printf("%c", arr2[i]);}}
3. 一维数组在内存中的存储
```cinclude
int main(){ int arr[10] = {0}; int i = 0; int sz = sizeof(arr)/sizeof(arr[0]); for(i=0; i<sz; ++i){ printf(“&arr[%d] = %p\n”, i, &arr[i]); } return 0; } /* 仔细观察输出的结果,我们知道,随着数组下标的增长,元素的地址,也在有规律的递增。 由此可以得出结论:数组在内存中是连续存放的。
*/
<a name="v0KgX"></a>### 4. 二维数组的创建和初始化```c//数组创建int arr[3][4];char arr[3][5];double arr[2][4];//数组初始化int arr[3][4] = {1,2,3,4};int arr[3][4] = {{1,2},{4,5}};int arr[][4] = {{2,3},{4,5}};//二维数组如果有初始化,行可以省略,列不能省略
5. 二维数组的使用
#include <stdio.h>int main(){int arr[3][4] = {0};int i = 0;for(i=0; i<3; i++){int j = 0;for(j=0; j<4; j++){arr[i][j] = i*4+j;}}for(i=0; i<3; i++){int j = 0;for(j=0; j<4; j++){printf("%d ", arr[i][j]);}}return 0;}
6. 二维数组在内存中的存储
像一维数组一样,这里我们尝试打印二维数组的每个元素。
#include <stdio.h>int main(){int arr[3][4];int i = 0;for(i=0; i<3; i++){int j = 0;for(j=0; j<4; j++){printf("&arr[%d][%d] = %p\n", i, j,&arr[i][j]);}}return 0;}/*通过结果我们可以分析到,其实二维数组在内存中也是连续存储的。*/
7. 数组越界
数组的下标是有范围限制的。 数组的下规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1。 所以数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。 C语言本身是不做数组下标的越界检查,编译器也不一定报错,但是编译器不报错,并不意味着程序就 是正确的, 所以程序员写代码时,最好自己做越界的检查,二维数组的行和列也可能存在越界。
