1.数组的创建
type name [const];
//type指数组的元素类型
//const是一个常量表达式,用来表示数组的大小,但是不可为0;
2.数组的初始化
数组的初始化是指,在创建数组的同时给数组的内容一些合理的初始值(初始化)。
int main()
{
int arr1[10] = { 1, 2, 3 };
int arr2[] = { 1, 2, 3, 4, 5 };
char arr3[5] = { 'a', 'b', 'c' };
char arr4[5] = { 'a', 98, 'c' };//同上
char arr5[] = "abcdef";//7个元素
system("pause");
return 0;
}
3.一维数组的使用
int main()
{
int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int i = 0;
for (i = 0; i < sizeof(a) / sizeof(*a); i++)
{
printf("%d ", a[i]);
}
system("pause");
return 0;
}
4.一维数组在内存中的存储
int main()
{
int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int i = 0;
for (i = 0; i < sizeof(a) / sizeof(*a); i++)
{
printf("%p\n", a[i]);
}
system("pause");
return 0;
}
运行结果为:
结论:数组在内存中连续存放,并且地址由低到高
5.一维数组的指针访问
int main()
{
int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int i = 0;
for (i = 0; i < sizeof(a) / sizeof(*a); i++)
{
printf("&a[%d]=%p<==>%p\n", i,&a[i],a+i);
}
system("pause");
return 0;
}
运行结果为:
结论数组的数组名其实就是数组首元素的地址。
则可使用下面代码打印数组:
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int i = 0;
int *p = &arr[0];
for (i = 0; i < sizeof(arr) / sizeof(*arr); i++)
{
printf("%d\n", *(p+i));
}
system("pause");
return 0;
}
6.二维数组的创建和初始化
int main()
{
int arr[3][4] = { 1, 2, 3 };
system("pause");
return 0;
}
行可以为空,但是列不能为空。
7.二维数组的使用
int main()
{
int arr[3][4] = { 0 };
int i = 0;
int j = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
arr[i][j] = i * 4 + j + 1;
}
}
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
printf("%d ", arr[i][j]);
}
}
system("pause");
return 0;
}
8.二维数组在内存中的存储
int main()
{
int arr[3][4] = { 0 };
int i = 0;
int j = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
printf("&arr[%d][%d]=%p\n ",i,j, &arr[i][j]);
}
}
system("pause");
return 0;
}
运行结果为:
通过结果我们可以分析到,其实二维数组在内存中也是连续存放的。如下图所示:
9.二维数组的指针访问
int main()
{
int arr[3][4] = { 0 };
int i = 0;
int j = 0;
int *p = &arr[0][0];
for (i = 0; i < sizeof(arr) / sizeof(arr[0][0]); i++)
{
*(p + i) = i + 1;
}
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
{
printf("%d\n ", arr[i][j]);
}
}
system("pause");
return 0;
}