- 一维数组
数组,即为一组相同类型的元素的集合;
1.1 一维数组的创建
数组的创建
① type_t:数组的元素类型;
② arr_name:数组名;
③ const_n:常量表达式,用于指定数组大小;
注意事项
① 数组创建,[ ] 中要给定常量,不能使用变量;
② 数组 [ ] 中的内容如果不指定大小(不填),则需要初始化;
一维数组创建方法演示
const_n中要给定一个常量,不能使用变量
int main() { int count = 10; int arr[count]; // error return 0; }
#define N 10 int main() { int arr2[N]; // yes return 0; }
1.2 一维数组的初始化
初始化:在创建数组的同时给数组的内容置一些合理的初始值;
int main() { int arr1[10]; // 创建一个大小为10的int类型数组 char arr2[20]; // 创建一个大小为20的char类型数组 float arr3[1]; // 创建一个大小为1的float类型数组 double arr4[] = { 0 }; // 创建一个不指定大小的double类型数组(需要初始化) return 0; }
1.3 字符数组初始化
int main() { char ch1[5] = {'b', 'i', 't'}; char ch2[] = {'b', 'i', 't'}; char ch3[5] = "bit"; // 'b', 'i', 't', '\0', '0' char ch4[] = "bit"; // 'b', 'i', ''t, '\0' return 0; }
字符数组初始化的两种写法
双引号写法自带斜杠0,花括号写法不自带斜杠0(需要手动添加)
int main() { char ch5[] = "bit"; // b, i, t, \0 char ch6[] = {'b', 'i', 't'}; // b i t printf("%s\n", ch5); printf("%s\n", ch6); return 0; }
没有 \0 时,strlen读取时并不会知道什么时候结束(继续往后面读,直到遇到斜杠0),
strlen:遇到斜杠0就停止
int main() { char ch5[] = "bit"; // b, i, t, \0 【自带斜杠0】 char ch6[] = {'b', 'i', 't'}; // b i t 【不自带斜杠0】 printf("%d\n", strlen(ch5));//3 printf("%d\n", strlen(ch6));//随机值 return 0; }
当然,你可以给他手动加上一个斜杠0,这样就不会是随机值了;
int main() { char ch5[] = "bit"; // b, i, t, \0 char ch6[] = {'b', 'i', 't', '\0'}; // b, i, t, + '\0' printf("%d\n", strlen(ch5));//3 printf("%d\n", strlen(ch6));//3 return 0; }
1.4 一维数组的使用
下标引用操作符: [ ] ,即数组访问操作符;
数组的大小计算方法:整个数组的大小除以一个字母的大小
可以利用 for 循环,逐一打印数组
#include<stdio.h> int main() { int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; int sz = sizeof(arr) / sizeof(arr[0]); for (int i = 0; i < sz; i++) { printf("%d ", arr[i]); } return 0; }
总结:
① 数组是使用下标来访问的,下标从0开始;
② 可以通过计算得到数组的大小;
1.5 一维数组在内存中的存储
按地址的格式打印:%p (十六进制的打印)
#include<stdio.h> int main() { int arr[10] = { 0 }; int sz = sizeof(arr) / sizeof(arr[0]); for (int i = 0; i < sz; i++) { printf("&arr[%d] = %p\n", i, &arr[i]); } return 0; }
仔细检视输出结果可知:随着数组下标的增长,元素的地址也在有规律的递增;
结论:数组在内存中时连续存放的;
2. 二维数组
2.1 二维数组的创建
① const_n1:行
② const_n2: 列
#include<stdio.h> int main() { int arr1[3][4] = { 1 };//创建一个3行4列的int型二维数组;并给第一个元素赋值1, /* //只要赋值一个,后面的都是0,不赋值的话就是随机值 0 0 0 0 0 0 0 0 0 0 0 0 */ printf("%d\n", arr1[0][0]);//1 printf("%d\n", arr1[0][1]);//0 char arr2[3][5]; // 创建一个3行5列的char型二维数组; double arr3[2][4]; // 创建一个2行4列的double型二维数组; return 0; }
2.2 二维数组的初始化
初始化:在创建数组的同时给数组的内容置一些合理的初始值;
注意事项:
① 二维数组初始化时,行可以省略,但是列不可以省略;
② 二维数组在内存中也是连续存放的;
初始化演示
#include<stdio.h> int main() { int arr[3][4] = { 1,2,3,4,5 }; /* 1 2 3 4 5 0 0 0 0 0 0 0 */ int arr[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 }; // 完全初始化 int arr2[3][4] = { 1,2,3,4,5,6,7 }; // 不完全初始化 - 后面补0; int arr3[3][4] = { {1,2}, {3,4}, {4,5} }; // 指定; /* 1 2 0 0 3 4 0 0 4 5 0 0 */ return 0; }
关于 " 行可以省略,列不可以省略 "
int main() { int arr1[][] = {{2,3}, {4,5}}; // error int arr2[3][] = {{2,3}, {4,5}}; // error int arr2[][4] = {{2,3}, {4,5}}; // √ return 0; }
C语言初阶④(数组)知识点+编程作业(三子棋,冒泡排序)(下):https://developer.aliyun.com/article/1512984