一、一维数组
1. 格式
存储类型 数据类型 数组名[元素个数];
2. 访问元素
数组名【下标】,下标从0开始
3. 数组名
数组首地址
4、初始化
1) 全部初始化:
int a[5]={1,2,3,4,5}
2) 部分初始化:
int a[5]={1,2};//1 2 0 0 0
未初始化的元素值为0
3) 未初始化:随机值,需要单个元素赋值
int a[5];
a[1]=2;
a[2]=3;
5、定义空数组
1) int a[5]={0,0,0,0,0};
2) int a[5]={0};
3) int a[5]={};
6、引用
1. 先定义后引用
2. 每次只能引用一个数组元素a[i],如果想引用所有元素可以循环遍历
3. 引用时防止数组越界,虽然有时编译器不会报错
4. 打印数组元素地址用%p格式
7、数组遍历
把数组下标作为循环变量,用for循环遍历
8、数组的大小
1. 数据元素个数*数据类型大小
2. sizeof(数组名)
9、计算元素个数
1. 直接观察
2. sizeof(数组名)/sizeof(数据类型)
10、清零函数
1. bzero
#include <strings.h>
void bzero(void *s, size_t n);
功能:将内存空间设置为0
参数:s:要清空的空间首地址
n:字节大小
返回值:无
例:int a[10]={1,2,3};
bzero(a,sizeof(a));//从地址a开始,sizeof(a)个字节全部清空
2. memset
#include <string.h>
void *memset(void *s, int c, size_t n);
功能:将内存空间设置为0
参数:s:要清空的空间的首地址
c:要设置的值,设置为0;
n:字节大小
返回值:要清空的空间的首地址
例:
int a[10]={1,2,3};
memset(a,0,sizeof(a));
二、二维数组
1. 格式
存储类型 数据类型 数组名[行数][列数]
int a[2][3];
2. 访问元素
数组名[行下标][列下标];(下标从0开始)
a[0][0]:第一行第一列的元素~a[1][2];行下标、列下标都不能越界
行数可以省略,列数不能省略。
int a[2][]={1,2,3,4,5,6};
3. 数组元素个数
数组元素个数 = 行数*列数
4. 二维数组大小
二维数组大小 = 数据类型大小*行数*列数
sizeof(数组名)
5. 数组名
a:第一行的首地址,a+1:第二行的首地址
6. 初始化
1) 全部初始化:
int a[2][3]={1,2,3,4,5,6};//顺序赋值
int a[2][3]={{1,2,3},{4,5,6}};//按行赋值
2) 部分初始化:未被赋值的元素值为0
int a[2][3]={1,2,3,4};//顺序赋值 1 2 3 4 0 0
int a[2][3]={{1,2},{4,5}};//按行赋值 1 2 0 4 5 0
3) 未初始化:随机值,需要单独赋值
int a[2][3];
7、二维数组的遍历
for循环嵌套,外层行数,内层列数
int a[m][n]={};
for(i=0;i<m;i++)//行下标
{
for(j=0;j<n;j++)//列下标
{
scanf()/printf()
}
}
三、字符数组
1、字符数组的输入
char s[32]={};、
1) scanf("%s",s);
输入的字符串不能含有空格,因为scanf输入字符串遇到空格或\n都会认为字符串输入结束,空格后面的内容就不再存放到数组里面
如果需要输入空格就按以下格式输入:
scanf("%[^\n]",s);//直到遇到\n才结束
2)for(i=0;i<32;i++)
{
scanf("%c",&s[i]);
}
3)gets
char *gets(char *s);
功能:从终端获取字符串
参数:s:目标字符数组的首地址
返回值:目标字符数组的首地址
gets(s);//gets在输入时不关心数组越界问题,使用时会报警告
2、输出
1. printf("%s\n",s);
2. for(i=0;i<32;i++)
printf("%c ",s[i]);
3.puts
int puts(const char *s);
功能:向终端输出字符串
参数:s:要输出字符数组的首地址
返回值:输出字符的个数
puts(s);