1. 返回值含义
返回值有时存在两种情况:合法值和非法值。
如果有非法值的情况,通常使用一些特定的值指代特殊情况。例如:数组下标只能是0和正数。我们实现数组查找元素下标时,存在找不到元素的情况,这时,使用-1
可以作为这种情况的返回值。
返回值的含义以及值是人为定义的。
2. 二维数组指针用法
-
一维数组指针用法
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 days[4][3]={31,28,31,30,31,30,31,31,30,31,30,31}; int* p = days[0]; for(int i=0;i<3;++i){ printf("%d ",p[i]); }
3. 一维数组多维使用方式
3.1 一维数组转二维数组
int n = 24;
int arr[n];
for(int i=0;i<n;++i){
arr[i] = i;
}
for(int i=0;i<n;++i){
printf("%d ",arr[i]);
}
printf("\n");
3.2 一维数组转二维数组
一维数组使用二维数组访问方式(二重循环),可看作盒子按照行列方式摆放。
[图片上传失败...(image-1b831c-1554125908932)]
int n = 24;
int arr[n];
for(int i=0;i<n;++i){
arr[i] = i;
}
int rows = 4;
int cols = 6;
for(int i=0;i<rows;++i){
for(int j=0;j<cols;++j){
printf("%d ",arr[i*cols+j]);
}
printf("\n");
}
3.3 一维数组转三维数组
一维数组使用三维数组访问方式(三重循环),可看作盒子按照行列高方式摆放。
[图片上传失败...(image-b0a23c-1554125908932)]
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");
}
4. 星期几的计算方式
基姆拉尔森计算公式
w=(d + 2*m + 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
为星期日。
- 公式中要把1月和2月分别当成上一年的13月和14月处理。
作者:jdzhangxin
链接:https://www.jianshu.com/p/f90e7dcc8c0f
侵删。