1. 返回值含义
返回值有时存在两种情况:合法值和非法值。
如果有非法值的情况,通常使用一些特定的值指代特殊情况。例如:数组下标只能是0和正数。我们实现数组查找元素下标时,存在找不到元素的情况,这时,使用-1
可以作为这种情况的返回值。
返回值的含义以及值是人为定义的。
2. 多维数组一维使用方式
2.1 二维数组转一维数组
- 按行遍历(二维数组最常用的遍历方式)
int days[4][3]={
{31,28,31},
{30,31,30},
{31,31,30},
{31,30,31}
};
int arr[4*3];
for(int i=0;i<4;++i){
for(int j=0;j<3;++j){
arr[i*3+j] = days[i][j];
}
}
- 按列遍历
int days[4][3]={
{31,28,31},
{30,31,30},
{31,31,30},
{31,30,31}
};
int arr[4*3];
for(int i=0;i<3;++i){
for(int j=0;j<4;++j){
arr[i*4+j] = days[j][i];
}
}
2.2 三维数组转一维数组
按照页行列的顺序依次遍历。
int days[2][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}
},
};
int arr[2*4*3];
for(int i=0;i<2;++i){
for(int j=0;j<4;++j){
for(int k=0;k<3;++k){
arr[i*4*3+j*3+k] = days[i][j][k];
}
}
}
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");
一维数组使用二维数组访问方式(二重循环),可看作盒子按照行列方式摆放。
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.2 一维数组转三维数组
一维数组使用三维数组访问方式(三重循环),可看作盒子按照行列高方式摆放。
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. 二维数组指针用法
-
一维数组指针用法
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]); }