当前位置:首页 » 编程语言 » c语言二维数组做形参的疑惑
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言二维数组做形参的疑惑

发布时间: 2022-06-20 01:52:25

Ⅰ 关于c语言二维数组作为参数

你在这里使用指向整数的指针去访问一个二维,不是不可以,但是前提是这里的size,必须与N的值完全相等。这里出错的原因就在于你程序的N=10,而size却等于3。你试一下定义N=3,看看怎么样。

Ⅱ c语言二维数组做形参的疑惑

是等价的

很多人以为“指向数组的指针”就是“指向指针的指针”,于是有人写这样的代码:
int a[3][4];
int **p = a;//错误
这个代码的错误之处在于a是一个数组,它的成员也是数组,所以a叫做“数组的数组”——C中严格说来没有二维数组。那么,你要用一个指针来记录a,就要用一个能表示“数组的数组”的指针,以下代码是正确的:
int (*p)[4] = a;//正确
只有这样才能保证++p使p指向a的下一对像(该对像是一个数组)。
顺便提一句:不要写成“int *p[4];”

Ⅲ c语言中的结构体二维数组做参数问题

1、如果在函数外定义的结构数组,又要在一个函数中进行输入、输出,通常情况下,其参数传递类型需要传址,即
void shuchu(struct std **cansu);
void shuchu(struct std *cansu[]);

这样调用改为 shuchu(&aa);

对函数内的相应操作改为指针操作即可。

2、通常情况下,对于一个系统设计而言,其输入输出是分开的,也即在2个函数中,从系统分析而言,建议分开。当然,就测试而言,是可以的。

3、如果一定要采用2维数组做参数,按照对于多维数组做参数的要求,前几维一定要给出确切的数值

如2维: void shuchu(struct std cansu[5][]) 就可以了。

Ⅳ C语言中如何将二维数组作为函数的参数传递

在c语言中可以用二维数组作为实参或者形参。
1、函数中用二维数组作为形参,函数声明中可以指定所有维数的大小,也可以省略第1维的维数如:
void f(int array[3][10]); //正确
void f(int array[][10]); //正确上面的两种二维数组形参表示都是正确的。
2、函数中用二维数组作为形参,不能把第2维或者更高维的大小省略,如下面的定义是不合法的:
void f(int array[][]); //错误

因为从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列,如果在形参中不说明列数,则系统无法决定应为多少行多少列,不能只指定一维而不指定第二维,下面写法是错误的:

void f(int array[3][]); //错误 3、二维数组作为实参传递时,必须保证实参第2维的维数与形参第2维的维数相同,因为必须要保证形参和实参的数据类型一致。比如定义如下函数:
void f(int array[][10]);可以将如下数组传递给函数f。
int a[2][10] = {1,2,3,4};
int b[4][10] = {1};

Ⅳ 关于C语言的二维数组作为函数参数的问题

所谓二维数组,实际上是指向数组的指针,比如:

int n=2,m=3;

int arr[n][m];

实际上相当于:

int n=2,m=3;

int (*arr)[m];

所以,传递二维数组作为参数,实际上就是传递了一个指针。

将形参的类型定义成int*,再在函数内部转换回指向数组的指针就行了,比如:

void f(int *p,int row,int column)

{

int (*arr)[column]=(int (*)[column])p;

//使用二维数组arr

}

这样传递参数:

int n=5,m=6;

int arr[n][m];

f((int*)arr,n,m);

下面是一个例子:

#include <stdio.h>

void f(int *p,int row,int column)

{

int (*arr)[column]=(int (*)[column])p;

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

{

for(int j=0;j<column-1;j++)

printf("%d,",arr[i][j]);

printf("%d ",arr[i][column-1]);

}

}

int main()

{

int n;

scanf("%d",&n);

int arr[n][n];

for(int i=0;i<n;i++)

{

for(int j=0;j<n;j++)

arr[i][j]=i*n+j;

}

f((int*)arr,n,n);

return 0;

}

这是运行截图:

Ⅵ c语言c++语言如何用二维数组做形参

C/C++中,二维数组的第一维的每一个元素都是一维数组。所以,用指向一维数组的指针或用第一维维数空缺的二维数组作为函数的形式参数都能达到目的。设处理数组为int型,举例代码如下:

//#include"stdafx.h"//Ifthevc++6.0,withthisline.
#include"stdio.h"
voidmyprint(int(*p)[5]){//p是指向有5个int型元素的一维数组的指针
//voidmyprint(intp[][5]){//这样写效果是一样的
inti,j;
for(i=0;i<3;i++){
for(j=0;j<5;printf("%3d",p[i][j++]));
printf(" ");
}
}
intmain(void){
inta[3][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};
myprint(a);
return0;
}

Ⅶ “c语言”和“c++语言”如何用二维数组做形参

二维数组做形参?C++的数组用形参的时候非常之弱,你确定你需要它?
N维数组做形参必须指定后n-1维的大小,不然编译器无法知道如何使用它,

void func(int a[][10]) 或 void func2(int b[][10][10])

虽然写是可以这样子写,不过,其实上面那种代码等价于
void func(int (*a)[10]) 和 void func2(int (*b)[10][10])

Ⅷ C语言怎么以二维数组作为参数传递的问题

考虑要把a作为参数传入到print中,那么print函数就要定义一个接收二维数组的参数,那么什么参数能接收二维数组呢。
就是print(int (*newbuf)[3])
然后newbuf的地址就是a的地址,然后newbuf[i][j]来访问每一个元素了

有问题继续问哈,写的可能不太明白

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

二维数组作为函数参数,实参可以直接使用二维数组名,在被调用函数中对形参数组定义可以指定所有维数的大小,也可以省略第一维的大小说明,如:

因为从实参传递来的是数组的起始地址,如果在形参中不说明列数,编译器将无法定位元素的的位置。

Ⅹ 关于c 二维数组的形参问题

在你定义f函数时,形参是一个二维数组行指针,这里的N指的是二维数组行长度,是不允许省略的,且N的长度必须和你前面定义的二维数组的行长度相等。除了用二维数组行指针,还可以直接写成二维数组形式:
f(int array[][N]);