//数组初始化 intmain() { //整型数组 int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//完全初始化 int arr2[10] = { 1,2,3,4,5 };//不完全初始化 int arr3[] = { 1,2,3,4,5 };//未指定数组大小,就根据初始化的内容来确定大小 //字符数组 char ch[10] = { 'h','e','l','l','o' };//剩余数组元素为\0 char ch2[] = { 'h','e','l','l','o' };//未指定数组大小,就根据初始化的内容来确定大小,没有\0 char ch3[10] = "hello";// h e l l o \0 0 0 0 0 char ch4[] = "hello";//未指定数组大小,就根据初始化的内容来确定大小,末尾会有 \0 return0; }
数组在创建的时候如果不指定数组的大小就得初始化。
数组的元素个数根据初始化的内容来确定。
一维数组的使用
[] - 下标引用操作符
数组是使用下标来访问的,下标是从0开始
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
intmain() { int arr[10] = { 0 };//不完全初始化 //数组的大小可以通过计算得到 int sz = sizeof(arr) / sizeof(arr[0]); int i = 0; for ( i = 0; i < sz; i++) { arr[i] = i; } for (i = 0; i < sz; i++) { printf("%d\n", arr[i]); } return0; }
一维数组在内存中的存储
1 2 3 4 5 6 7 8 9 10 11
intmain() { int arr[10] = { 0 };//不完全初始化 int i = 0; for (i = 0; i < 10; i++) { printf("&arr[%d] = %p\n",i, &arr[i]); } return0; }
内存地址为十六进制,0~9 a b c d e f
可以发现,相邻的元素的地址都相差了4,而一个元素四个字节,一个字节给一个地址
所以我们可以知道,一维数组在内存中是连续存放的,而随着数组下标的增长,地址是由低到高变化的
那么只要我们知道了数组的第一个元素,就可以找到整个数组的元素
1 2 3 4 5 6 7 8 9 10 11 12
intmain() { int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; int* pa = arr; int i = 0; for (i = 0; i < 10; i++) { printf("%d ", *pa); pa++; } return0; }
二维数组
二维数组的创建
1 2 3 4 5 6
intmain() { int arr[3][4]; char arr[3][10]; return0; }