- 数组未初始化,数组里面的值都是随机值。
- 数组初始化为{0},数组里面的值都是0。
- 数组初始化为{非零值},数组里面第一个值是非零值,其他的值都是0。
数组部分初始化
int arr[12] = {[2]=2,[5]=5};
for(int i=0;i<12;++i){
printf("%d ",arr[i]);
}
指定下标的值被赋值,其他的值都是0。这是C99语法。
数组的大小
char carr[12];
int iarr[12];
double farr[12];
printf("carr = %d\n",sizeof(carr));//12
printf("iarr = %d\n",sizeof(iarr));//48
printf("farr = %d\n",sizeof(farr));//96
sizeof给出整个数组所占据的内容的大小。数组大小=元素大小*数组个数。
二维数组
二位数组可以省略第一维大小,第二维不能省略。
int days[][3]={31,28,31,30,31,30,31,31,30,31,30,31};
多维数组
int days[][4][3]={
{31,28,31,30,31,30,31,31,30,31,30,31}, // 平年
{31,29,31,30,31,30,31,31,30,31,30,31} // 闰年
};
printf("平年二月天数为%d\n",days[0][0][1]);// 平年第一季度第二个月 28
printf("闰年二月天数为%d\n",days[1][0][1]);// 闰年第一季度第二个月 29
多维数组初始化只能第一个维度可以省略。
一维数组用法
No. | 操作 | 下标 | 指针 |
---|---|---|---|
1 | 第i个元素值 | arr[i] | *(arr+i) |
2 | 第i个元素地址 | &arr[i] | arr+i |
二维数组
No. | 操作 | 下标 | 指针 |
---|---|---|---|
1 | 第i行第j列元素值 | arr[i][j] | ((arr+i)+j) |
2 | 第i行第j列元素地址 | &arr[i][j] | *(arr+i)+j |
在二维数组中a[i]就是一个一维数组。
#include <stdio.h>
int main () {
int days[4][3]={31,28,31,30,31,30,31,31,30,31,30,31};
printf("days[0]\t\t = %p\n&days[0][0]\t = %p\n",days[0],&days[0][0]);
printf("days[1]\t\t = %p\n&days[1][0]\t = %p\n",days[1],&days[1][0]);
printf("days[2]\t\t = %p\n&days[2][0]\t = %p\n",days[2],&days[2][0]);
printf("days[3]\t\t = %p\n&days[3][0]\t = %p\n",days[3],&days[3][0]);
return 0;
此输出结果每行相同
}
二维数组
元素下标 = 当前行序号*列元素个数 + 当前列序号
三维数组
元素下标 = 当前面序号 * 面元素个数 + 当前行序号 * 列元素个数 + 当前列序号
int i,j;
int n = 24;
int arr[n];
for(int i=0;i<n;++i){
arr[i] = i;
}
int pages = 2;
int rows = 4;
int cols = 3;
for(i=0;i<pages;++i){
for(j=0;j<rows;++j){
for(k=0;k<cols;++k){
printf("%d ",arr[i*rows*cols+j*cols+k]);
}
printf("\n");
}
printf("\n");
}//此程序运行出来是两个二维数组
星期几的计算方法
w=(d + 2m + 3(m+1)/5 + y + y/4 - y/100 + y/400) % 7
说明
公式中要把1月和2月分别当成上一年的13月和14月处理。
例如:2008年1月4日要换成 2007年13月4日带入公式。
公式对应的与蔡勒公式有点区别:0为星期1,……,6为星期日。