C语言入门:数组

  • 数组未初始化,数组里面的值都是随机值。
  • 数组初始化为{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为星期日。

猜你喜欢

转载自blog.csdn.net/qq_43598865/article/details/88950915