请问在c中动态声明的二维数组如何在函数之间传递,是否可以把二维变一维

请问在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);