请问在c中动态声明的二维数组如何在函数之间传递,因为二维数组是在内存中是连续存储的, 是否可以把二维变一维传递
可以,直接传首地址作为指针就可以了。
数组名就是二维数组的首地址
各位懂我动态声明的意思吗,在不清楚二维数组具体行列数的情况下,我写的函数声明里int a[][?]问号是个未知数,也就是说我不能用这个常规的写法
数组角码为变量的情况只有一种,就是当变量为子函数形参的时候。可以在调这个子函数时把动态的数组角码发给它的形参,然后在子函数中来定义二维数组,在用一个一位数组把数据传给这个子函数来初始化二维数组。也就是说这个子函数有三个形参:function(行,列,一位数组指针)。希望我的回答能给你带来灵感。。。
子函数是如何知道这个二维数组的行数和列数的。如果能给段程序看就最好了,不知道你的具体问题是什么,不好回答
如果不能提前知道数组的长度,只好传递首地址,并同时传递长度信息
using namespace std;
//将0变成1,1变成0
void f(char **p,int rowNum,int coluNum)
{
for(int i=0;i<rowNum;i++)
{
for(int j=0;j<coluNum;j++)
{
if(p[i][j]=='0')
{
p[i][j]='1';
}
else
{
p[i][j]='0';
}
}
}
}
//从控制台获取二维数组p的初始值
void get_p(char **p,int *rowNum,int *coluNum)
{
for(int i=0;i<*rowNum;i++)
{
for(int j=0;j<*coluNum;j++)
{
cin >> p[i][j];
}
}
}
//初始化二维数组,即给指针p分配内存。这里注意要使用引用
void init_p(char**&p,int *rowNum,int *coluNum)
{
cin >> *rowNum >> *coluNum;
p=new char*[*rowNum];
for(int i=0;i<*rowNum;i++)
{
p[i]=new char[*coluNum];
}
}
//打印二维数组
void print_p(char**p,int rowNum,int coluNum)
{
cout << "\n------------------------" << endl;
for(int i=0;i<rowNum;i++)
{
for(int j=0;j<coluNum;j++)
{
cout << p[i][j] << " ";
}
cout << endl;
}
}
//释放内存
void destory_p(char**&p;int rowNum,int coluNum)
{
for(int i=0;i<*rowNum;i++)
{
delete p[i];
}
delete p;
}
int main(void)
{
int rowNum,coluNum; //指针的行和列
char **p; //二维指针
init_p(p,&rowNum,&coluNum); //初始化指针
get_p(p,rowNum,coluNum); //给指针赋值
print_p(p,rowNum,coluNum); //打印
f(p,rowNum,coluNum); //反转 0 和 1
print_p(p,rowNum,coluNum); //再次打印
destory_p(p,rowNum,coluNum) //释放内存
return 0;
}
int array[10][5];
void sendData(array);