一维数组
定义
存储类型 数据类型 数组名[元素的个数]<br>
数组名:代表数组的首地址 <br>地址常量:不可以被重新赋值,不能为左值,不可以进行++ --的操作<br>数组中的每一项都是变量,称之为元素<br>
数组更新
访问元素:数组名[元素的下标],下标从零开始<br>访问第一个元素arr[0],访问第N个元素arr[N-1]<br>注意数组越界的问题,会有修改别的变量的风险,原变量的值会被覆盖<br>修改元素的内容:数组名[元素的下标] = 新值<br>
特点
数组的类型要和后面存储的数据的数据类型相同
内存地址是连续的
定义数组时遵循标识符的命名规则
数组下标从零开始,有N'个元素,下标到N-1
在同一个函数中,数组名和变量名不能重名
初始化
全部初始化
int a[3] = {1,2,3};<br>
部分初始化
int a[3] = {1,2};<br>
未赋值的元素值为0
未初始化
int a[3]; <br>
未赋值的元素值为随机数
数组遍历
int a[N] = {0,1……,N};<br>int i;<br>for(i = 0;i < N;i++)<br>{<br> printf("%d",a[i]);<br>}<br>
数组的输入输出
scanf
printf
gets
功能:从终端输入一个字符串
参数:字符数组的首地址
返回值:目标字符串的首地址
注意:使用gets的时候要注意关心数组越界的问题,使用时会报警告不要在意,不影响运行
puts
功能:向终端输出一个字符串
参数:要输出的字符数组的首地址
返回值:输出字符的个数
数组的大小
元素的个数*数据类型的大小<br>
sizeof()<br>int arr[5];<br>printf("%d\n",sizeof(arr));<br>
数组元素的个数
数组的大小/数据类型的大小<br>sizeof(数组名)/sizeof(数据类型)
清空函数
bzero:<br>#include <strings.h><br>void bzero(void *s, size_t n);<br>
功能:将内存空间设置为0
参数:s:需要清空空间的首地址<br>n:需要清空空间的字节大小
返回值:无
memset:<br>#include <string.h><br>void *memset(void *s, int c, size_t n);<br>
功能:将内存空间设置为0
参数:s:需要清空空间的首地址<br>c:将空间设置成的大小,默认是写0,设置成其他的不准确<br>n:需要清空空间的字节大小<br>
返回值:清空空间后的首地址
字符数组
概念:用来存放若干字符的集合(存放字符串),数据类型是char类型
注意:在定义字符数组时,经常省略元素的个数,需要注意数组越界
字符的输入输出
for循环,打印格式用%c<br>可以使用%[^\n]直到遇到\n,才理解为结束<br>char a[32];<br>int i;<br>scanf("%[^\n]",a);<br>printf("%s\n",a);<br>
字符数组计算字符个数(字符数组的实际长度)
for循环,将判断条件设置为不等于\0进行计数加1<br>sizeof(数组名)/sizeof(数据类型)<br>sizeof(数组名)-1<br>
stelen:<br>#include <string.h><br>size_t strlen(const char *s);<br>
功能:计算字符串实际长度
参数:s:字符串的首地址
返回值:字符串的实际长度
sizeof和strlen的区别
sizeof是一个关键字,strlen是一个函数
sizeof作用是用来计算数据所占空间的大小,strlen是用来计算字符串的实际长度
sizeof计算时包含\0,但是strlen不包含
排序<br>双重循环 外层控制轮数i,内层循环比较次数j<br>
冒泡排序
两两进行比较,相邻的两个数进行比较
特点:第一轮比较完成之后最大值在最后面
选择排序
在N个数中找最小值,标记下标<br>
特点:第一轮结束之后最小值在最前面<br>
二维数组
格式:存储类型 数据类型 数组名[行数][列数]<br>int arr [][3];可以省略行数,但是不能省略列数<br>
访问元素:数组名[行下标][列下标]<br>
元素的个数:行数*列数
数组大小:行数*列数*数据类型的大小<br>sizeof(数组名)
初始化
全部初始化
int arr[2][3] = {1,2,3,4,5,6};按照顺序赋值<br>int arr[2][3] = {1,2,3},{4,5,6};按照行进行赋值
部分初始化
int arr[2][3] = {1,2,3,4};按照顺序赋值1,2,3,4,0,0<br>int arr[2][3] = {1,2},{4};按照行进行赋值1,2,0,4,0,0
未初始化
只能一个元素一个元素的赋值,未赋值的是随机数<br>int arr[2][3];<br>a[0][0] = 1;<br>
二维数组的遍历
for的嵌套,外层循环控制行数,内层循环控制列数
输入输出<br>
字符串可以直接按行输出<br>char arr[2][6] = {i,hello,china};按照顺序赋值<br>printf("%s %s %s",a[2],a[1],a[0]);<br>