❶ 关于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语言二维数组传值
多维数组传递,n要为固定大小,void p( arr[][5] );
int arr[2][5];
p(arr);
来自下面网址
网页链接
❸ C语言怎么以二维数组作为参数传递的问题
考虑要把a作为参数传入到print中,那么print函数就要定义一个接收二维数组的参数,那么什么参数能接收二维数组呢。
就是print(int (*newbuf)[3])
然后newbuf的地址就是a的地址,然后newbuf[i][j]来访问每一个元素了
有问题继续问哈,写的可能不太明白
❹ 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语言中如何将二维数组作为函数的参数传递
函数原型 type fun (type (name*)[size])
type是你要定义的类型,fun是函数名,name是在函数中二维数组的名字,
size是二维数组第2维的长度。
这样调用这个函数只需要把二维数组函数名传递就可以了。
❻ C语言 二维数组传递参数
二维数组传递给函数的时候,有两种方式,一种是a[][6],一种是(*a)[6],这里的6是不能省略的,不然编译器不知道如何通过加多少来偏移这个指向数组的指针。
❼ C语言:二维数组 形参传值写法
编译器实际处理多维数组是把一维数组分段处理的,也就是说实际上并不存在多维数组,多维数组仅仅是个逻辑概念。
例如下面这个:
int fun(int a[2][3],int n);
或者
int fun(int a[][3],int n);
要指出列数是多少,行数写不写都一样,行数要通过n进行传递。
假设
int b[2][3]={};
则调用的时候可以写:
fun(b,2);
❽ C语言问题,请问二维数组的函数参数是怎么传递的
数组为参数时会退化为一个二级指针传递,如图,可以将函数头部写成
void shuchu(int **array_num);
在函数中调用时,直接传递数组名就可以了,数组名可以视为数组的“头指针”,可以用这个指针进行一系列的相关操作,如图,可以按如下方式调用
shuchu(a);
另外,一个建议:不要在传参时忽略数组的长度,最好显式的以参数的形式传递给函数
或者,在数组中做标志,在函数中使用时可以根据标志自行分出维度
满意请采纳,不满意请追问
❾ C语言中 指针做函数参数传递二维数组
#include <stdio.h>
void fun(int (*p1)[3],int (*p2)[3]);
int main()
{
int p1[3][3]={{7,8,9},{4,5,6},{1,2,3}} ;
int p2[3][3] = {0};
int i = 0, j = 0;
fun(p1,p2);
for(i = 0;i < 3;i++){
for(j = 0;j < 3;j++){
printf("%d ",*(*(p2+i)+j));
}
printf(" ");
}
return 0;
}
void fun(int (*p1)[3],int (*p2)[3])
{
int i = 0,j = 0;
for(i = 0;i < 3;i++){
for(j = 0;j < 3;j++){
*(p2[j]+i) = *(p1[i]+j);
}
}
}
(9)c语言二维数组如何传参数扩展阅读:
函数指针的声明方法为:
返回值类型 ( *指针变量名) ([形参列表]);
其中,“返回值类型”说明函数的返回类型,“(指针变量名 )”中的括号不能省,括号改变了运算符的优先级。若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
或者使用下面的方法将函数地址赋给函数指针:
f = &func;
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。
网络-函数指针
❿ 二维数组如何当参数传递
在形参是数组的情况下,只要是数组,无论维数,实际上在调用函数时,传给函数的将是一个数组的首地址,以及维数等相关信息
也就是说,在函数执行过程中,并不会新开辟内存空间,而是形参实参共用同一段内存空间
所以,在这种情况下,函数内部对数组进行修改,其值会返回给实参
你的例子中调用部分有问题,不能这样
shuru(a[10][2])
而是
shuru(a)
因为a[10][2]代表数组a中的一个元素,而且是越界的
而a才是数组名