双重数组做参数
答案:3 悬赏:70
解决时间 2021-01-21 09:10
- 提问者网友:杀生予夺
- 2021-01-20 18:33
双重数组做参数
最佳答案
- 二级知识专家网友:像个废品
- 2021-01-20 19:00
请问这是一个单独的值还是一个数组呢?
如果是数组,
就直接把a作为参数就可以了
调用的时候就是fuc(a);
在fuc(void* p)这个函数里面
首先要把a强制转为他之前的类型,如果声明的时候是int a[2][3]; 就需要在fuc函数中这样转换:
int *b = (int *)p
如果要重新找到它里面所对应的数据,就只能按顺序一个一个找,*(b+i),而他之前作为2维数组的信息在传递的时候就丢失了
如果是单独的一个数,也是直接传递,传递过去就直接*b就找到这个数了
追问:是个char a[2][3] 在fuc中如何获取 a[0]和a[1] 这2个数组?
fuc(void*p)
char* b =(char*)p?只能获取到a[0]的a[1]的怎么获取呢?
追答:对,如果是char a[2][3],就必须要
char *b = (char *)p;
这样获得。
后面你说的不太准确,由于a是二维数组,a[1]应该是a[1][0],那么就只能*(b + 3)这样拿到a[1][0]的值了。
如果是数组,
就直接把a作为参数就可以了
调用的时候就是fuc(a);
在fuc(void* p)这个函数里面
首先要把a强制转为他之前的类型,如果声明的时候是int a[2][3]; 就需要在fuc函数中这样转换:
int *b = (int *)p
如果要重新找到它里面所对应的数据,就只能按顺序一个一个找,*(b+i),而他之前作为2维数组的信息在传递的时候就丢失了
如果是单独的一个数,也是直接传递,传递过去就直接*b就找到这个数了
追问:是个char a[2][3] 在fuc中如何获取 a[0]和a[1] 这2个数组?
fuc(void*p)
char* b =(char*)p?只能获取到a[0]的a[1]的怎么获取呢?
追答:对,如果是char a[2][3],就必须要
char *b = (char *)p;
这样获得。
后面你说的不太准确,由于a是二维数组,a[1]应该是a[1][0],那么就只能*(b + 3)这样拿到a[1][0]的值了。
全部回答
- 1楼网友:持酒劝斜阳
- 2021-01-20 20:51
主调函数中
void *p = a[0][0];
int n = 6; // 2 X 3
fun(p,n); // 调用语句
函数原型: fun(void *p, int n); // 应该有返回值
追问:在fun(void* p)中如何get它呢
追答:数组a的类型是你声明并定义的,如何使用该数组元素当然也是已知的啦。
主调函数中的 *P初始化有问题,应该是
void *p = &a[0][0];
抱歉。
追问:是个char a[2][3] 在fuc中如何获取 a[0]和a[1] 这2个数组?
fuc(void*p)
char* b =(char*)p?只能获取到a[0]的a[1]的怎么获取呢?
void *p = a[0][0];
int n = 6; // 2 X 3
fun(p,n); // 调用语句
函数原型: fun(void *p, int n); // 应该有返回值
追问:在fun(void* p)中如何get它呢
追答:数组a的类型是你声明并定义的,如何使用该数组元素当然也是已知的啦。
主调函数中的 *P初始化有问题,应该是
void *p = &a[0][0];
抱歉。
追问:是个char a[2][3] 在fuc中如何获取 a[0]和a[1] 这2个数组?
fuc(void*p)
char* b =(char*)p?只能获取到a[0]的a[1]的怎么获取呢?
- 2楼网友:我住北渡口
- 2021-01-20 19:32
要将二维数组a[R][C] 传给一个函数 fuc,fuc函数的原型可以有多种形式:
T1 fun(T2 x[][C], int r); // T1,T2为数据类型标识符,r用来接收数组行数——(1)
T1 fun(T2 (*x)[C], int r); // T1,T2为数据类型标识符,r用来接收数组行数——(2)
T1 fun(T2 *x, int r, int c); // T1,T2为数据类型标识符,r和c用来接收数组行数和列数——(3)
对于(1)和(2)两种形式的函数原型,调用函数的形式为:
fun(a)// a为列数为C的二维数组名
函数体中用双下标变量形式访问数组元素,比如x[i][j]。
对于(3)形式的函数原型,调用函数的形式为:
fun(&a[0][0])或者 fun(a[0])// a为列数为C的二维数组名
函数体中通过将一维数组映射到二维数组的方法访问数组元素,这时,第i行第j列的元素表示为:
*(x+i*c+j)
T1 fun(T2 x[][C], int r); // T1,T2为数据类型标识符,r用来接收数组行数——(1)
T1 fun(T2 (*x)[C], int r); // T1,T2为数据类型标识符,r用来接收数组行数——(2)
T1 fun(T2 *x, int r, int c); // T1,T2为数据类型标识符,r和c用来接收数组行数和列数——(3)
对于(1)和(2)两种形式的函数原型,调用函数的形式为:
fun(a)// a为列数为C的二维数组名
函数体中用双下标变量形式访问数组元素,比如x[i][j]。
对于(3)形式的函数原型,调用函数的形式为:
fun(&a[0][0])或者 fun(a[0])// a为列数为C的二维数组名
函数体中通过将一维数组映射到二维数组的方法访问数组元素,这时,第i行第j列的元素表示为:
*(x+i*c+j)
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯