欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言的二维数组、及多维数组的降维

程序员文章站 2024-03-04 15:23:53
...

    二维数组可以理解为一个二维表格,也类似于一个由指向行数组的指针构成的一维指针数组。因此,二维数组(包括高维)可以进行降维,最后变成一维数组。

    二维数组的定义形式:数据类型 标识符[ ] [ ]

    第一维一般称为“行”,第二维称为“列”。比如: float array[3][4]。

    二维数组的初始化。


    1. 将所有数据写在一个大括号内,如:

    array[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

    数组逐行、逐列顺序地被赋予上述数值。


    2.分行赋值

    array[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

    一行一个大括号,以此类推。这种方式最直观。如果写成以下形式,则更为直观:


int sqrs[5][2] = {
    1,1,
    2,4,
    3,9,
    4,16,
    5,25
};

//初始化多维数组时,可以在每维初始化字符的前后加上花括号,这叫做“子集分组”
int sqrs[5][2] = {
    {1,1},
    {2,4},
    {3,9},
    {4,16},
    {5,25}
};


    3.部分赋值。原则是从前往后优先赋值,后面没有赋值到的自动赋值为0。

    array[3][4]={{1,2},{8},{9,10}};

    这种赋值方式下,数组的元素分布情况为:

    1,2,0,0

    8,0,0,0

    9,10,0,0



下例将数值1-12装入一个3行4列的二维数组,然后将其按行打印出来。

#include <stdio.h>

main()
{
	int t,i,num[3][4];

	//用2个循环给二维数组num进行赋值
	for(t=0;t<3;++t)
		for(i=0;i<4;++i)
			num[t][i]=(t*4)+i+1;

	//用2个循环将二维数组的值逐项进行输出
	for(t=0;t<3;++t){
		for(i=0;i<4;++i)
			printf("%3d",num[t][i]);
		printf("\n");
	}
}

运行结果:

C语言的二维数组、及多维数组的降维


C语言的二维数组、及多维数组的降维

C语言的二维数组、及多维数组的降维


    把二维数组作为函数的变元时,实际只传送指向数组第一个元素的指针。然而,在接收二维数组变元的函数中,至少应该定义第二维的长度,因为C编译程序必须了解每列的长度后才能正确地对数组进行下标操作。例如,接收10、10二维数组的函数必须定义成:

    void fun1(int x[][10])

    {

        /*......*/

    }

    编译程序必须了解第二维的准确长度,否则无法确定第二行从哪里开始。


    因为二维数组可以被看做由指向行数组的指针构成的一维指针数组,因此,使用指针变量是访问二维数组元素的简便方法。以下函数说明了这一技术,并为全局整形数组num的指定行输出内容:

int num[10][10]
/* ... */

void pr_row(int j)
{
    int *p, t;
    p=(int *)&num[j][0];    //获取j行第1个元素的地址
    for(t=0;t<10;++t)
        printf("%d",*(p+t));
}

    通过产生调用变元为行号、行长和指向第一个元素的指针,可以把以上程序变成通用子程序:

void pr_row(int j,int row_dimension,int *p)
{
    int t;

    p=p+(j * row_dimension);
    for(t=0;t<row_dimension;++t)
        printf("%d",*(p+t));
}

/* ... */

void f(void)
{
    int num[10][10];

    //打印出第一行
    pr_row(0,10,(int *)num);
}


    多于二维的数组也可以通过类似方法降维处理。例如,三维数组降成指向二维数组的指针,二维数组再进一步降成指向一维数组的指针。归纳之,n维数组可以降为一个指针和一个(n-1)维数组;新(n-1)维数组同样可降为一个指针和一个(n-2)维数组;以此类推,直到降成一维数组位置。
相关标签: C