c语言函数引入二维数组 C语言函数调用二维数组

c语言中怎么用二维数组作为函数参数

C语言中

创新互联专注于华州企业网站建设,响应式网站开发,商城网站定制开发。华州网站建设公司,为华州等地区提供建站服务。全流程按需开发网站,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务

指针做函数参数传递二维数组有两种基本方法:1、传递“数组指针”pre

t="code"

l="cpp"#include

stdio.h

void

output(

int

(*pa)[3],

int

n

)//这个函数只能输出n行3列的二维数组

{

int

i,j;

for(

i=0;in;i++

){

for(

j=0;j3;j++

)

printf("%d

",

pa[i][j]

);

printf("\n");

}

}

void

main()

{

int

a[2][3]={

{1,2,3},

{4,5,6}

};

output(a,2);

}2、传递“指针数组”

先将二维数组的行指针存储到一个指针数组中,再将指针数组传递到子函数中去。pre

t="code"

l="cpp"#include

stdio.h

void

output(

int

*pa[],

int

row,int

col

)

//这个函数更通用,但调用前,要做好准备工作。

{

int

i,j;

for(

i=0;irow;i++

){

for(

j=0;jcol;j++

)

printf("%d

",

pa[i][j]

);

printf("\n");

}

}

void

main()

{

int

a[2][3]={

{1,2,3},

{4,5,6}

};

int

i;

int

*pa[2];

for(

i=0;i2;i++

)

pa[i]=a[i];

output(pa,

2,

3);

}

C语言中,如何手动输入二维数组

C语言中,如何手动输入二维数组?c语言的数组是非常重要的内容,特别是二维数组的内容,所以今天就由小编来为大家介绍c语言怎么创建一个二维数组。

工具原料c语言电脑

方法/步骤分步阅读

1

/6

第一首先在电脑上打开c语言编程软件。

然后创建项目。

2

/6

第二然后导入stdio.h和stdlib包。

再加入malloc包。

3

/6

第三然后定义五个参数。

再创建其中两个参数的空间。

4

/6

第四然后用for语句进行循环。

再用scanf语句进行接收输入到二维数组。。

5

/6

第五然后用两个for语言循环。

再输出二维数组的数值。

6

/6

第六然后用printf语句进行数据输出分格。

这样一个二维数组就创建成功了。

注意事项

个人经验,仅供参考。

内容仅供参考并受版权保护

扩展内容:

二维数组:

二维数组本质上是以数组作为数组元素的数组,即“数组的数组”,类型说明符 数组名[常量表达式][常量表达式]。二维数组又称为矩阵,行列数相等的矩阵称为方阵。对称矩阵a[i][j] = a[j][i],对角矩阵:n阶方阵主对角线外都是零元素。

二维数组A[m][n],这是一个m行,n列的二维数组。设a[p][q]为A的第一个元素,即二维数组的行下标从p到m+p,列下标从q到n+q,按“行优先顺序”存储时则元素a[i][j]的地址计算为:LOC(a[i][j]) = LOC(a[p][q]) + ((i − p) * n + (j − q)) * t,按“列优先顺序”存储时,地址计算为:LOC(a[i][j]) = LOC(a[p][q]) + ((j − q) * m + (i − p)) * t,存放该数组至少需要的单元数为(m-p+1) * (n-q+1) * t 个字节。

VC++如何在函数中引用一个二维数组

形参和实参只要维数对应就可以了

例如

函数中 proc(int a[][10]) 可以省略第一维的大小,因为c语言编译系统不检查第一维的大小,只要第二维大小相同,形参数组第一维可以与实参不同。

主函数中 先定义了b[][10]

引用时:proc(b)即可

即把2维数组b得首地址即b[0][0]的地址传给形参a,因为数组名本身既是指针常量,所以在函数中对数组a中元素的操作会改变数组b中元素得值。

c语言中如何引用二维数组

数组的4种声明方式:

1.先声明再初始化

例如:

//1.声明

int[] nums;

//初始化

nums = new int[5];

2.声明并初始化

例如:

//2.声明、初始化

int[] nums = new int[10];

3.创建数组同时赋值

例如:

//3.创建数组同时赋值

String[] names=new String[]{"大名","小米","夏雨荷"};

int[] ages=new int[]{21,22,21,56,13};

for (int i = 0;i names.length;i++){

System.out.prinrln(names[i]);

}

for (int i = 0;i ages.length;i++){

System.out.prinrln(ages[i]);

}

4.创建同时赋值,简写,不能写成两条语句

例如:

//4.创建同时赋值,简写,不能写成两条语句

String[] cities = {"上海","北京"};

扩展资料:

数组(Array)是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。 这些有序排列的同类数据元素的集合称为数组。

数组是用于储存多个相同类型数据的集合。

在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。

c语言函数怎么传入一个二维数组

这样传:

函数声明:Func(变量类型 *[二维数组的列长] arry);

char arry[][4] ;

Func(arry);

如何通过函数调用二维数组

C语言编程的过程中,不可避免的会碰到二维或二维以上的数组作为函数的形参的情况,在以前的编程过程中,习惯了动态数组的应用,很是使用直接定义高维数组。最近在编程的过程中就碰到了这个问题:有如下的测试程序:

voidtest(double  **x,int Row,int Col);

voidtest(double  **x)

{

for(int i=0;iRow;i++)

for(int k=0;kCol;k++)

x[i][k] += 100.0;

}

intmain(int argc, char *argv[])

{

/*

double **x;

x = new double *[3];

for(int i=0;i3;i++)

x[i] = new double[3];

*/

double x[3][3];

for(int i=0;i3;i++)

for(int k=0;k3;k++)

x[i][k] = i*k;

test(x,3,3);

for(int i=0;i3;i++)

for(int k=0;k3;k++)

printf("x[%d][%d]= %e\n",i,k,x[i][k]);

getch();

return 0;

}

编译时提示Cannot convert 'double [*][3]' to double **'。

将调用方式强制进行类型转换:test((double **)x),编译通过,运行出错,提示非法越界。

据传:因为栈上分配的数组和堆上分配的数组在内存排列上可能不相同,直接定义的数组是存储在程序的堆栈区,数据占用连续的区间;而动态申请的数组是在系统的远堆上(far heap),除最后一维的元素是连续存放的外,其他维上的元素有可能不是在一块连续的内存区域里。

//栈上: 

int   ia[2][2]   = {2,3,4,5};    //4个元素是连续排列的内存段 

//堆上: 

int   **p  =  new  int*[2];   //只有每行内是连续排列,各行并不一定连续排列 

for ( int  i  = 0;  i   2; i++ ) 

p[i]   =  new  int[2]; 

for ( int  i  =  0;  i    2;  i++ ) 

for ( int  j  =  0;  j    2;  j++ ) 

p[i][j]   =   ia[i][j]; 

所以对栈上的数组用int  **p指向首地址,因为int  **p一次解引用为地址指针,而非堆上的指向数组的指针,所以二次解引用会出错。 

如果找一个通用方程只能用: 

void   f( int  *p, int  row,  int  col )     //给出数组的行和列,对堆上的数组不合适   

for ( int  i =  0;  i    row;  i++) 

for ( int  j  =  0;  j   col;  j++ ) 

cout   p[i * row + j]   "   ";                        

cout   endl; 

int   main(){ 

//......... 

int   ia[2][2]   =  {2,3,4,5}; 

f( (int*)ia, 2, 2 ); 

}

采用上面的通用办法还是比较麻烦,这无形中对编程增加了难度,为了避免这个麻烦可以采用动态数组的形式,将原来采用直接定义的数组全部换成动态数组,类似开头例子中被注释掉的那部分代码,当然这样也有后续的麻烦,动态数组的生命周期完成后必须释放内存空间,这也有点罗嗦,但是毕竟可以直接使用数组的形式,比上面的通用方式还是要简单一点。

如果执意要使用直接定义的数组该怎么办呢?有如下几种方法:

方法一:

voidtest(double  (*x)[3], int Row, int Col);

调用方式:test(x,Row,Col);

调用用方式 test(x,Row,Col);

方法二:

voidtest(double  x[][3], int Row,int Col);

调用方式 test(x,Row,Col);

对于多维数组作为参数,除第一维之外的其它维必须指定维数,否则是肯定编译不过去的。

从上面的对直接定义的数组的引用情况看,直接定义的数组的使用比较麻烦,一旦直接定义数组的维数发生变换,函数的定义必须相应的修改,否则程序就会出错,这也增加了程序进一步开发的麻烦,为了一劳永逸的解决这个问题,建议还是使用动态数组的方法,虽然需要手工释放内存,但是除却了后续的麻烦。


网站栏目:c语言函数引入二维数组 C语言函数调用二维数组
网站URL:http://hbruida.cn/article/docjhgp.html