程序中定义数组是为了实现将离散变量变为连续变量(变量内存单元连续),利用循环使程序处理简单化。
一、一维数组
定义与赋值
char arr[10]; // 循环赋值 for (int i = 0; i < 10; ++i) { arr[i] = 'A' + i; } for (int i = 0; i < 10; ++i) { printf("%c ", arr[i]); } // 直接赋值,未赋值元素默认为 0 short int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8}; for (int i = 0; i < 10; ++i) { printf("%d", a[i]); } // 数组长度为 3 short int b[] = {1, 2, 3}; // 数组不初始化,元素为随机值 short int c[];
通过地址取值
char arr[10]; for (int i = 0; i < 10; ++i) { arr[i] = 'A' + i; } // 直接打印变量名为数组第一个元素的指针,取指定元素的地址 &arr[5] printf(" %p", a); for (int i = 0; i < 10; ++i) { printf("%c ", *(arr + sizeof(char) * i)); }
初始化和拷贝
#include <stdio.h> #include <string.h> int main() { char arr[10]; // 初始化,全部赋值为 A memset(arr, 'C', 10 * sizeof(char)); for (int i = 0; i < 10; ++i) { printf("%c ", arr[i]); } printf(" "); char cpy[10]; // 拷贝前 5 个,后 5 个未赋值的为空(已初始化) memcpy(cpy, arr, 5 * sizeof(char)); for (int i = 0; i < 10; ++i) { printf("%c ", cpy[i]); } return 0; }
二、多维数组
定义与赋值
// 数组的维数上限仅受编译程序限制 // 二维数组的元素是一个一维数组 // 二维数组物理上按行存储 // a[0] -> a[0][0],a[0][1],a[0][2] // a[1] -> a[1][0],a[1][1],a[1][2] // 未赋值默认为 0 // 不允许 int arr[2][3] = {{},{5, 6}}; 至少要有一个元素 int arr[2][3] = {{1},{5, 6}}; // 等同定义 arr[2][3] int arr[][3] = {{1, 2, 3},{4, 5, 6}}; // 等同于 int arr[2][3] = {1, 2, 3, 4, 5, 6}; // 等同于 int arr[][3] = {1, 2, 3, 4, 5, 6}; int arr[2][3] = {{1, 2, 3},{4, 5, 6}}; for (int i = 0; i < 2; ++i) { for (int j = 0; j < 3; ++j) { printf("%d ", arr[i][j]); } printf(" "); } // 二维数组变量名是数组所占内存空间的首地址 // 也就是第一个元素的指针 printf("%p", arr);
三、字符串与数组
字符串是一种以 结尾的数组
ASCII: 0x63 0x68 0x69 0x6e 0x61 0 对应字符串: c h i n a
定义与赋值
// 会自动添加 ,数组大小为 6 char str[] = "china"; // 手动添加 ,数组大小为 6 char str[] = {'c', 'h', 'i', 'n', 'a','