1、数组的定义
- 方括号中是元素个数,非负整数字面量
int a[5];
- 数组的初始化,数据不能多可以少
- 少的部分用数值0填充
int a[5]={
0}//所有元素均为0
int a[]={
1,2,3}
2、数组的赋值
- 数组可以在初始化时赋值
int a[5]={
1,2,3,4,5}
- 也可以对每个元素逐一赋值
int a[5];
a[1]=1;
a[2]=2;
a[3]=3;
a[4]=2;
a[5]=5;
3、一维数组的地址
#include <stdio.h>
int main()
{
int a[3] = {
1,2,3};
printf("数组a的地址:\t%p\n", a);
printf("数组a的地址:\t%p\n", &a);
printf("首元素的地址:\t%p\n", &a[0]);
printf("a[1]的地址:\t%p %p\n", &a[1], a + 1);
printf("a[2]的地址\t%p %p\n", &a[2], a + 2);
return 0;
}
输出:
由上面的例子得出结论
a+i == &a[i]
分别对两边取值,即
*(a+i)== a[i]
也可以写成
*(a+i) == * (i+a)
即
*(i+a) == i[a]
4、数组名
- 对数组a取地址,然后再解地址,其实还是数组a
#include <stdio.h>
int main()
{
int a[5] = {
1,2,3 };
(*&a)[1] = 11; //对数组a取地址,然后再解地址,其实还是数组a
printf("%d", a[1]);
return 0;
}
输出:
11
- 数组+1和元素+1区别很大
#include <stdio.h>
int main()
{
int a[5] = {
1,2,3 };
printf("%p\n", a);
printf("%p\n", &a);
printf("%p\n", (*&a));
printf("%p\n", &a[0]);
printf("*******************\n");
printf("%p\n", a + 1);
printf("%p\n", &a + 1); //数组+1
printf("%p\n", (*&a) + 1);
printf("%p\n", &a[0]+1);
return 0;
}
输出:
5、字符数组
以‘\0’结尾的字符数组才是字符串
int main()
{
char a[4] = {
'A','B','C','D' };
printf("%s\n", a);//输出有很大机率会有乱码
return 0;
}
输出
int main()
{
char a[5] = {
'A','B','\0','C','D' };
printf("%s\n", a);
return 0;
}
输出:
AB