目录
一、数组的概念
二、数组的类型
三、一维数组
3.1 一维数组的创建
#include <stdio.h>
int main()
{
	int arr1[10];//定义可存放10个整型的一维数组
	char arr2[4];//定义可存放4个字符的一维数组
	float arr3[6];//定义可存放6个单精度浮点型的一维数组
	//...
	return 0;
}3.2 一维数组的初始化
#include <stdio.h>
int main()
{
	int arr1[10] = { 1, 2, 3, 4, 5, 6 ,7, 8, 9,10 };//完全初始化
	int arr2[10] = { 0 };//不完全初始化
	int arr3[] = { 1, 2, 3, 4 };//省略数组大小的初始化,数组大小为4
	return 0;
}3.3 一维数组的访问
//一维数组的输入和输出
#include <stdio.h>
int main()
{
	int arr[10] = { 0 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int i = 0;//循环变量
	for (i = 0; i < sz; i++)
	{
		scanf("%d", &arr[i]);
		printf("%d ", arr[i]);
	}
	return 0;
}3.4 一维数组在内存中的存储
//验证一维数组在内存中的存储方式
#include <stdio.h>
int main()
{
	char arr[5] = { '0', '1', '2', '3', '4'};//字符数组,每个元素占一个字节
	int sz = sizeof(arr) / sizeof(arr[0]);
	int i = 0;//循环变量
	for (i = 0; i < sz; i++)
	{
		printf("arr[%d]=%p\n", i, &arr[i]);
	}
	return 0;
} 
四、二维数组
4.1 二维数组的创建
#include <stdio.h>
int main()
{
	int arr[3][5];//定义三行五列的整型二维数组
	char arr2[4][6];//定义4行6列的字符二维数组
	float arr3[2][4];//定义2行4列的浮点数二维数组
	//...
	return 0;
}4.2 二维数组的初始化
#include <stdio.h>
int main()
{
	int arr1[3][4] = { { 1, 2, 3, 4 }, { 2, 3, 4, 5 }, { 3, 4, 5, 6 } };//完全初始化
	int arr2[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };//完全初始化
	int arr2[3][4] = { { 1 }, { 2, 3 }, { 4, 6, 8 } };//不完全初始化
	int arr3[3][4] = { 0, 1, 2 };//不完全初始化
	int arr4[][4] = { 1, 2 };//数组为1行4列
	int arr5[][4] = { { 1 }, { 3 }, { 2 , 5 } };//数组为3行4列
	return 0;
}4.3 二维数组的访问
//二维数组的输入和输出
#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++)
		{
			scanf("%d", &arr[i][j]);
			printf("%d ", arr[i][j]);
		}
		//换行
		printf("\n");
	}
	return 0;
}4.4 二维数组在内存中的存储
//验证二维数组在内存中的存储方式
#include <stdio.h>
int main()
{
	char arr[2][3] = { { '1', '2', '3' }, { '2', '3', '4' }};//字符数组,每个元素占一个字节
	int i = 0;//循环变量
	for (i = 0; i < 2; i++)
	{
		int j = 0;//循环变量
		for (j = 0; j < 3; j++)
		{
			printf("arr[%d][%d]=%p\n", i, j, &arr[i][j]);
		}
	}
	return 0;
} 
五、变长数组
六、sizeof计算数组的大小
七、字符串数组
7.1 字符串数组的创建
7.2 字符串数组的初始化
#include <stdio.h>
int main()
{
    //一维字符串
	//方法一:用双引号初始化
	char arr1[4] = "abc";//完全初始化  a b c \0
    char arr2[4] = "ab";//不完全初始化 a b \0
    char arr3[] = "ab"//字符串数组大小为3
	//方法二:用大括号的初始化
	char arr4[4] = { 'a', 'b', 'c', '\0' };//完全初始化
	char arr5[4] = { 'a', 'b', '\0'};//不完全初始化
    char arr6[] = { 'a', 'b', '\0'};//字符串数组大小为3
 
    char arr7[4] = { 'a', 'b', 'c', 'd' };//不是字符串数组,因为数组中没有\0
	char arr8[4] = { 'a', 'b'};//不是字符串数组,因为数组中没有\0
    char arr9[] = { 'a', 'b'};//不是字符串数组,因为数组中没有\0                  
	return 0;
}7.3 字符串数组的输入
#include <stdio.h>
int main()
{
	char arr1[10] = { '0'};
	//输入方法一:
	scanf("%s", arr1);//"hello world",只会读取hello
	//输入方法二:
	gets(arr1);//"hello world",全部读取
	return 0;
}7.4 字符串数组的输出
#include <stdio.h>
int main()
{
	char arr1[10] = "abcde";
	//输出方法一:
	printf("%s\n", arr1);//不会自动换行,打印时加\n
	//输出方法二:
	puts(arr1);//会自动换行
	return 0;
}7.5 字符串数组经典应用
//【实现:多个字符从两端移动,向中间汇聚】
//##########################
//Y########################!
//Yo######################!!
//You####################!!!
//You ##################!!!!
// ...
//You are the best!!!!!!!!!!
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
int main()
{
	char arr1[] = "You are the best!!!!!!!!!!";
	char arr2[] = "##########################";
	//计算数组arr2的元素个数
	int sz = sizeof(arr2) / sizeof(arr2[0]);
	//再屏幕上先打印数组arr2的内容
	printf("%s\n", arr2);
	int left = 0;
	int right = sz - 2;//字符串的末尾隐藏着一个\0
	while (left <= right)
	{
		//睡眠1000毫秒
		Sleep(700);//sleep的第一个字母大写!
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		//清屏
		system("cls");//system函数是库函数,执行系统命令,cls清理控制台屏幕
		//再次在屏幕上打印数组arr2
		printf("%s\n", arr2);
		//调整
		left++;
		right--;
	}
	return 0;
}八、指针数组
8.1 指针数组
#include <stdio.h>
int main()
{
	int arr1[] = { 1, 2, 3 };
	int arr2[] = { 2, 3, 4 };
	int arr3[] = { 3, 4, 5 };
	int* arr[3] = { arr1, arr2, arr3 };//一维指针数组
	//由于数组名是数组首元素的地址,每个数组首元素的地址是int*类型的
	//所以arr指针数组语法中的tpye部分要写成int*
	return 0;
}8.2 指针数组模拟实现二维数组
#include <stdio.h>
int main()
{
     int arr1[] = {1,2,3,4,5};
     int arr2[] = {2,3,4,5,6};
     int arr3[] = {3,4,5,6,7};
     
     int* parr[3] = {arr1, arr2, arr3};//一位指针数组
     int i = 0;
     int j = 0;
     for(i=0; i<3; i++)
     {
         for(j=0; j<5; j++)
         {
             printf("%d ", parr[i][j]);
         }
         printf("\n");
     }
     return 0;
}九、函数指针数组
9.1 函数指针数组
#include <stdio.h>
int Add(int x, int y)
{
	//...
	return x + y;
}
int Sub(int x, int y)
{
	//...
	return x - y;
}
int Mul(int x, int y)
{
	//...
	return x * y;
}
int main()
{
	int (*arr[3])(int, int) = { Add, Sub, Mul };//函数指针数组
                                                //arr是数组名,[3]表示数组大小
    //int ret = (arr+1)(2, 3);//err
	//int ret = (*(arr + 1))(2, 3);
	int ret = arr[1](2, 3);//下标直接访问
	printf("%d\n", ret);
	return 0;
}9.2 转移表
#include <stdio.h>
int add(int a, int b)
{
	return a + b;
}
int sub(int a, int b)
{
	return a - b;
}
int mul(int a, int b)
{
	return a * b;
}
int div(int a, int b)
{
	return a / b;
}
int main()
{
	int x, y;
	int input = 1;
	int ret = 0;
	int(*p[5])(int x, int y) = { 0, add, sub, mul, div }; //转移表
	do
	{
		printf("*************************\n");
		printf(" 1:add 2:sub \n");
		printf(" 3:mul 4:div \n");
		printf(" 0:exit \n");
		printf("*************************\n");
		printf("请选择:");
		scanf("%d", &input);
		if ((input <= 4 && input >= 1))
		{
			printf("输⼊操作数:");
			scanf("%d %d", &x, &y);
			ret = p[input](x, y);
			printf("ret = %d\n", ret);
		}
		else if (input == 0)
		{
			printf("退出计算器\n");
		}
		else
		{
			printf("输⼊有误\n");
		}
	} while (input);
	return 0;
}十、结构体数组
//首先声明结构体类型
struct stu
{
	char name[20];
	int age;
};
 
//定义结构体数组,并初始化
struct stu mate[3]={{"Allen",18},{"Smith",19},{"Grace",18}};十一、一维数组_例题
[NOIP2013]记数问题_牛客题霸_牛客网 (nowcoder.com)
逆序输出_牛客题霸_牛客网 (nowcoder.com)
N个数之和_牛客题霸_牛客网 (nowcoder.com)
最高分与最低分之差_牛客题霸_牛客网 (nowcoder.com)
争夺前五名_牛客题霸_牛客网 (nowcoder.com)
有序序列合并_牛客题霸_牛客网 (nowcoder.com)
有序序列判断_牛客题霸_牛客网 (nowcoder.com)
有序序列插入一个整数_牛客题霸_牛客网 (nowcoder.com)
序列中删除指定数字_牛客题霸_牛客网 (nowcoder.com)
序列中整数去重_牛客题霸_牛客网 (nowcoder.com)
小乐乐查找数字_牛客题霸_牛客网 (nowcoder.com)
筛选法求素数_牛客题霸_牛客网 (nowcoder.com)
十二、二维数组_例题
回型矩阵_牛客题霸_牛客网 (nowcoder.com)
蛇形矩阵_牛客题霸_牛客网 (nowcoder.com)
井字棋_牛客题霸_牛客网 (nowcoder.com)
扫雷_牛客题霸_牛客网 (nowcoder.com)
十三、字符数组_例题
[NOIP2018]标题统计_牛客题霸_牛客网 (nowcoder.com)
[NOIP2008]笨小猴_牛客题霸_牛客网 (nowcoder.com)
添加逗号_牛客题霸_牛客网 (nowcoder.com)
字符串操作_牛客题霸_牛客网 (nowcoder.com)
简写单词_牛客题霸_牛客网 (nowcoder.com)
十四、图片

本篇已完结。。。。。。










