#include <stdioh>
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("\n");
}
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);
}
}
}
扩展资料:
返回值类型 ( 指针变量名) ([形参列表]);
其中,“返回值类型”说明函数的返回类型,“(指针变量名 )”中的括号不能省,括号改变了运算符的优先级。若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:
int func(int x); / 声明一个函数 /
int (f) (int x); / 声明一个函数指针 /
f=func; / 将func函数的首地址赋给指针f /
或者使用下面的方法将函数地址赋给函数指针:
f = &func;
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。
参考资料:
-函数指针
传递分为值传递和地址传递。
例如:算出A(10,9,1),B(1,6,5),C(4,5,6),D(1,2,3)
四人语数外总分。
#include <sydioh>
void main ()
{ int f (int s2[][],int i,int j);
int s1[4][3]={(10,9,1),(1,6,5),(4,5,6),(1,2,3)};
int i, j,s=0
for (i=0;i<4;i++)
{for (j=0;j<3;j++)
s+=f(s1,i,j);\\调用函数
printf("\n");
}
}
int f (int s2[][],int i,int j)
{return a[i][j];
}
由于VB的理念所致,他没有指针的应用,所以你的想法不能用常规的VB做法实现。但VB其实并不是没有指针,只是不推荐使用,如果一定要这样,可以使用强制指针类型,这个网上也有,你可以找找,不过确实,不推荐,因为这样并不安全。
其实,可以在传递参数之前做一些别的工作,比如把你要的数据先复制到一个新的数组里,然后在传递这个新的数组。虽然效率低了,但更加安全。。。这就是VB的理念,没办法~
ls几个真是太不负责任了, 想当然的int
为什么不自己亲自try it
一般来说数组的传递方法应该是这种形式的
void function(type arrayName[][a][b][c]){
}
如果是一维数组 void F(type N[]) (简写)
二维 void F(type N[][a]) ,这里a是一个数
以此类推
lz这里就应该是void gaibian(int b[][2])
我们平时经常可以看到void F(type N)这样的形式,用来传递数组。
然而实际上这只是种取巧的手段,因为数组某种程度上和指针是等价的。
上面那种形式的真正意义应该是“传递指针”。
应该再明确一点:
是数组的名字和指针变量的 *** 作方式很相似。
譬如int a[10], 与 int a;
都可以用 (a+i) 与 a[i] 这两种索引方法
如果对于多维数组就不完全一样了
譬如int a[10][10]; int b;
b=a;
那么 a[i][j] 与 b[10i+j]是相等的。
因此lz的函数也可以改成这样子:
void gaibian(int b)
{
b[02+0]=1;
b[02+1]=2;
b[12+0]=3;
b[12+1]=4;
}
编译可以通过, 但会受到一个警告“int ”与“int [2][2]”的间接级别不同
Whatever, 数组参数绝对不应该有type 这种类型
刚才看资料, 发现还有一种形式, 应该说更接近本质的形式
void function(type (arrayName)[a][b][c]){
}
它与
void function(type arrayName[][a][b][c]){
}
不同之处就是arrayName[]换成了(arrayName)
意思都差不多, 效果也差不多。
int func(int a){
input(size);
malloc(a, size);
do something;
free(a);
}
规定若是将二维数组作为实参传递给函数,那么在函数的参数声明中必须显示地指明数组的列数,因此可以改为如下:
将int mColoring(int n, int m, int a) 改为int mColoring(int n, int m, int (a)[4]),或者直接就写为int mColoring(int n, int m, int a[4][4]),亦或者int mColoring(int n, int m, int a[][4])。参数的行数没有关系。
二维数组的两个维数,第二个维数不能在调用的时候确定。
这是因为二维数组在内存中的连续存放的。
从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列,如果在形参中不说明列数,则系统无法决定应为多少行多少列,不能只指定一维而不指定第二维。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)