void Table(int k,int **a)传值

jay00 2011-09-28 09:35:22
如题;

void Table(int k,int **a){


void main(){
int a[10][10];
Table(10,?); //请问如何给这个二维数组传过去
}
...全文
169 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿尼小码 2011-09-29
  • 打赏
  • 举报
回复
如题;

void Table(int k,int a[]){


void main(){
int a[10][10];
Table(10,a[0]); //请问如何给这个二维数组传过去
}
把二维数组换为一维数组平p[i][j]=p[i*n+j](n为列数)
jay00 2011-09-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pathuang68 的回复:]
引用 4 楼 anyidan 的回复:

Table(10, (int**)a);


++

可以参考下面的代码:

C/C++ code


#include <iostream>
using namespace std;

void table(int k, int** array)
{
for(int i = 0; i < k; ++i)
……
[/Quote]
因为算法书上方法的代码:

void Table(int k,int **a){
int i,n=1;
for(i=1;i<=k;i++)n*=2;
for(i=1;i<=n;i++)a[1][i]=i;
int m=1;
int x,y;
for(int s=1;s<=k;s++){
n/=2;
for(int t=1;t<=n;t++)
for(i=m+1;i<=2*m;i++)
for(int j=m+1;j<=2*m;j++){
x=j+(t-1)*m*2;
y=j+(t-1)*m*2-m;
a[i][x]=a[i-m][y];
a[i][y]=a[i-m][x];
}
m*=2;

}
}

所以想用二级指针来调用,您给的方法可以用
但是方法里用到 a[][]还是出错。
若不修改table方法体该怎么实现?
快乐的小菜鸟 2011-09-29
  • 打赏
  • 举报
回复
楼主 多测试一下 debug
快乐的小菜鸟 2011-09-29
  • 打赏
  • 举报
回复
传一维指针 然后进行一维序列的操作 或者 使用强制转换
qq120848369 2011-09-29
  • 打赏
  • 举报
回复
void table(int n,int (*arr)[10]);
void table(int n,int arr[][10]);
erick 2011-09-29
  • 打赏
  • 举报
回复
[Quote=引用楼主 jay00 的回复:]
如题;

void Table(int k,int **a){


void main(){
int a[10][10];
Table(10,?); //请问如何给这个二维数组传过去
}
[/Quote]这个应该是参数匹配的问题。
erick 2011-09-29
  • 打赏
  • 举报
回复
[Quote=引用楼主 jay00 的回复:]
如题;

void Table(int k,int **a){


void main(){
int a[10][10];
Table(10,?); //请问如何给这个二维数组传过去
}
[/Quote]这个应该是参数匹配的问题。
erick 2011-09-29
  • 打赏
  • 举报
回复
[Quote=引用楼主 jay00 的回复:]
如题;

void Table(int k,int **a){


void main(){
int a[10][10];
Table(10,?); //请问如何给这个二维数组传过去
}
[/Quote]这个应该是参数匹配的问题。
cc之家 2011-09-29
  • 打赏
  • 举报
回复
int a[2][2] ;
int **p =a // 错误用法

int (*p)[2] = a //正确
pathuang68 2011-09-28
  • 打赏
  • 举报
回复
我个人比较喜欢这么写:

#include <iostream>
using namespace std;

void table(int k, int* array) // 这里也是一级指针
{
for(int i = 0; i < k; ++i)
{
for(int j = 0; j < k; ++j)
{
cout << (int)*(array + i * k + j) << "\t";
}
cout << endl;
}
}

int main(void)
{
int a[2][2] = {{1, 2}, {3, 4}};
table(2, (int*)a); // 传一级指针
return 0;
}


因为所有的多级指针或者多维数组,都可以最终转化为一级指针或者一维数组。
pathuang68 2011-09-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 anyidan 的回复:]

Table(10, (int**)a);
[/Quote]

++

可以参考下面的代码:

#include <iostream>
using namespace std;

void table(int k, int** array)
{
for(int i = 0; i < k; ++i)
{
for(int j = 0; j < k; ++j)
{
cout << (int)*(array + i * k + j) << "\t";
}
cout << endl;
}
}

int main(void)
{
int a[2][2] = {{1, 2}, {3, 4}};
table(2, (int**)a);
return 0;
}
AnYidan 2011-09-28
  • 打赏
  • 举报
回复
Table(10, (int**)a);
jay00 2011-09-28
  • 打赏
  • 举报
回复
函数要求如题;

void Table(int k,int **a){


在里面要使用a[][]这个二维数组

求解该如何传递参数int *a[] 貌似调用不了a[][]
jay00 2011-09-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 namelij 的回复:]
void Table(int k,int **a){


void main(){
int a[10][10];
Table(10,?); //请问如何给这个二维数组传过去
}

直接
Table(10, a);
[/Quote]

Table(i,a);我是这么写的但是:error C2664: 'Table' : cannot convert parameter 2 from 'int [16][16]' to 'int ** '
  • 打赏
  • 举报
回复
void Table(int k,int **a){


void main(){
int a[10][10];
Table(10,?); //请问如何给这个二维数组传过去
}

直接
Table(10, a);

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧