C语言学习-第十二天-数组
数组的初始化
#include<stdio.h>
int main(void)
{
int arr[3] = { 1,2,3 };
printf("%d", (sizeof(arr)/ sizeof(arr[0])));
return 0;
}
3
在声明了数组的元素个数时,但在初始化中没有指定,则没有指定的元素是0
int main(void)
{
int arr[3] = { 1,2 };
int sz = (sizeof(arr) / sizeof(arr[0]));
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d\n", arr[i]);
}
return 0;
}
1
2
0
可以不指定初始化数组的大小
int main(void)
{
int arr[] = { 1,2 };
int sz = (sizeof(arr) / sizeof(arr[0]));
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d\n", arr[i]);
}
return 0;
}
1
2
数组是连续的空间存在的,是紧挨着的
二维数组声明
二维数组必须指定元素个数
编译器不对数组越界做检查
需要注意:在使用函数传参时,传的是数组的元素的首地址,不能讲数组的大小传递到函数中
int main(void)
{
int arr[5][5] = { {1},{2},{3},{4},{5} };
int sz = sizeof(arr)/sizeof(arr[0]);
int sz2 = sizeof(arr[0][0])/sizeof(arr[0][0]);
int i = 0;
int j = 0;
for (i = 0; i <= sz-1; i++)
{
for (j = 0; j <= sz2-1; j++)
{
printf("%d ", arr[i][j]);
}
}
return 0;
}
1 2 3 4 5
注意:
sizeof(arr)计算的是数组的字节大小,&arr指向的是数组的地址,arr和&arr[0]都是数组首元素的地址
int main(void)
{
int arr[3] = { 1,2,3 };
printf("%d\n", sizeof(arr));
printf("%p\n", arr);
printf("%p\n", &arr[0]);
printf("%p\n", &arr + 1);
return 0;
}