C语⾔⼆维数组的定义、初始化、赋值
这种常规形式的数组⼀般使⽤不过⼆维,并且数组名很特殊,有跟指针以及地址有密不可分的关系,但是不⼀样,并且它使⽤数据的静态存储区。要使⽤⼤容量的动态内存,需要单独开辟,这⾥不做介绍,并且⽀持变量形式的申请。更多c语⾔数组基础知识可以翻看我之前画的博客。
先看⼀段代码
#include <stdio.h>
int main(){
int i, j; //⼆维数组下标
int sum = 0; //当前科⽬的总成绩
int average; //总平均分
int v[3]; //各科平均分
int a[5][3]; //⽤来保存每个同学各科成绩的⼆维数组
printf("Input score:\n");
for(i=0; i<3; i++){
for(j=0; j<5; j++){
scanf("%d", &a[j][i]); //输⼊每个同学的各科成绩
sum += a[j][i]; //计算当前科⽬的总成绩
}
v[i]=sum/5; // 当前科⽬的平均分
sum=0;
}
average = (v[0] + v[1] + v[2]) / 3;
printf("Math: %d\nC Languag: %d\nEnglish: %d\n", v[0], v[1], v[2]);
printf("Total: %d\n", average);
return 0;
}
再看⼀段代码:
#include <stdio.h>
int main(){
int i, j, k;
int a[2][5][3]={{ {1,2,3}, {2,3,4}, {3,4,5}, {4,5,6}, {5,6,7} }, { {10,20,30}, {20,30,40}, {30,40,50}, {40,50,60}, {50,60,70} }},;
for(i=0; i<2; i++){
for(j=0; j<5; j++){
for(k=0; k<3; k++){
printf("a[%d][%d][%d] = %d\n", i, j, k, a[i][j][k]);
}
}
}
return 0;
}
打印⼆维数组的三种⽅法
⽅法⼀:常规法
⽼⽼实实传⼆维数组。
void print1(int arr[3][5], int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
int main()
{
int arr[3][5] = { 1,2,3,4,5,6,7,8,9,10 };
print1(arr, 3, 5);
return 0;
}
这段代码块,arr[3][5]⾥的3可省略,降维后与前⼀维度⽆关.但5不能省略,因为降维后的指针类型与元素个数有关,省略后指针会类型不明确.
⽅法⼆:传指针法
数组传参都会发⽣降维,降维成指向其内部元素的指针,因为⼆维数组被看成⼀个数组元素为⼀维数组的⼀维数组。所以在这⾥,⼆维数组arr降维成⼀个指向⼀维数组的指针,即(*arr)[5],这⾥与3也就没有任何关系了。
void print2(int (*arr)[5], int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
int main()
{
int arr[3][5] = { 1,2,3,4,5,6,7,8,9,10 };
print2(&arr, 3, 5);
return 0;
}
⽅法三:⼀维数组打印法
在我所总结的关于规律⾥,认为所有的不管⼏维数组,都可以被看为⼀维数组。所以⼆维数组就是⼀维数组,只不过⾥⾯的元素为⼀维数组。所以我想要通过⼀维数组来打印⼆维数组。这⾥假设打印⼀个3⾏3列的数组。arr[3][3].
我们通过画图来灵感:⼆维数组的下标我们很容易得到,现在问题是怎么得到这个⼀维数组的下标?我们先把我们需要的新下标列出来,
然后再来寻i,j和新下标之间的关系,通过观察我们能得到:新下标=i*row+j
那么代码如下:
参考:void print3(int *arr, int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
c语言二维数组表示方法{
for (j = 0; j < col; j++)
{
printf("%d ", arr[i*row+j]);
}
printf("\n");
}
}
int main()
{
int arr[3][3] = { 1,2,3,4,5,6,7,8,9};
print3(arr, 3, 3);
return 0;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论