一。数组
数组的作用:
存储大量同种数据类型时,为了避免重复定义标识符,出现标识符过多,出现忘记和重复,所以引入了数组。
什么是数组:
数组是具有一定顺序关系的若干个变量的集合,组成数组的各个变量称为数组的元素。
数组的特点:
数组中各元素的数据类型要求相同,用数组名和下标确定。数组可以是一维的,也可以是多维的。
数组的定义:
变量: <存储类型><数据类型><变量名/标识符>
auto int a;
数组的定义:
<存储类型><数据类型><数组名/标识符>[数组元素个数];
auto int arr[6];
存储类型:
auto:普通类型,可以省略;
register:寄存器存储;
static:静态存储类型;
extern:外部存储类型;
数据类型:
int char short long double float;
数组名:
符合标识符命名规则;
数组的初始化
int a = 0;
完全初始化:
int arr[6] = {0}; //给数组的所有元素赋初值为0
int arr[6] = {1,2,3,4,5,6};
部分初始化:
int arr[6] = {7,8,9};
int arr[] = {1,5,6,8,18,9,677,4};
int a1[];
数组的赋值
int arr[6];
arr[0]=1;
arr[1]=2;
...
for(int i=0;i<6;i++)
scanf("%d",&arr[i]);
//注:只能一个元素一个的赋值
数组的元素的访问
数组名【下标】
arr[2]=10;
printf("%d\n",arr[2]);
终端打印: 10;
数组的遍历
int arr[6];
for(int i=0;i<6;i++)
printf("%d ",arr[i]);
遍历:指将数组所有元素都访问一遍
数组的越界
在定义数组时,计算机会预留一部分空间; 防止编译编不过。
二。字符数组
1。定义
数组的定义:
<存储类型><数据类型><数组名/标识符>[数组元素个数];
auto char ch[6];
2.初始化
完全初始化:
auto char ch【5】 = {‘h’,‘e’,‘l’,‘o’};
char ch[5] = {"hello"};
char ch[5]= "hello";
部分初始化:
char ch[5] = {'h','i'};
char ch[5] = {"hi"};
char ch[] = "hello";
3赋值
char ch[5];
ch[0] = 'h';
ch[i] = 'e';
...
ch = "hello";
4.字符串输入输出函数(puts,gets)
char *gets(char *s);
int puts(const char *s);
gets:是不安全的;
puts:在打印的时候,会默认加一个换行;
三,字符串操作数组
头文件:
#include <string.h>
strlen:
函数原型:
size_t strlen(const char *s);
功能:
得到s中的字符串的长度;
返回值:
返回长度;
sizeof与strlen的区别
1.sizeof求大小的时候会加上'\0';
2.sizeof(数组名):求数组空间一共有多大;
strlen(数组名):求数组内的有效字符有多少个,遇到'\0'就结束;
3.sizeof是运算符,strlen是函数;
strcpy:
函数原型:
char *strcpy(char *dest, const char *src);
功能:
把src内的字符串,复制到dest中去;
src:字符串常量,字符数组名;
dest:字符数组名;
char *strncpy(char *dest, const char *src, size_t n);
功能;
把src内的字符串的前n个字符,复制到dest中去;
src:字符串常量,字符数组名;
dest:字符数组名;
strcat:
函数原型
char *strcat(char *dest, const char *src);
功能:
把src里面的字符串,追加到dest中;
src:字符串常量,字符数组名;
dest:字符数组名;
char *strncat(char *dest, const char *src, size_t n);
功能:
把src里面的前n个字符串,追加到dest中;
src:字符串常量,字符数组名;
dest:字符数组名;
strcmp:
函数原型:
int strcmp(const char *s1, const char *s2);
功能:
比较s1和s2里面的字符的ASCII码的大小;
返回值:
等于0:代表s1和s2两个字符串相同;
大于0:s1对应的ASCII码值要大一点;
小于0:S2对应的ASCII码值要大一点;
int strncmp(const char *s1, const char *s2, size_t n);
功能:
比较s1和s2里面的亲前n字符的ASCII码的大小;
返回值:
等于0:代表s1和s2两个字符串相同;
四。多维数组
一.二维数组:
1.1二维数组的定义:
<存储类型><数据类型><数组名/标识符>[行数][列数]
(auto) int arr[3][4];
1.2二维数组的初始化:
完全初始化:
int arr[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
部分初始化;
int arr[3][4] = {1,2,34,5,64,7,4};
int arr[3][4] = {{1,2},{3,4,5},{6}};
char buf[4][32] = {"hello","world","ni","hao"};
int arr[][4]:初始化时,二维数组的行数可以省略,列数不能省略;
1.3二维数组的赋值:和一维数组相同,只能一个一个的赋值;
int arr[3][4];
arr[0][0] = 1;
arr[0][1] = 2;
...
1.4二维数组的访问:
数组名[行号][列号];
arr[2][3] = 3;
二维数组的遍历:
int arr[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
for(int i=0;i<3;i++)
{
for(int j=0;j<4;j++)
printf("%-3d",arr[i][j]);
puts("");
}
1.5二维数组名:
代表整个二维数组空间,二维数组名也代表整片空间的首地址,第一行所在的地址;
int arr[3][4];
arr[0];