| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 965 人关注过本帖
标题:用多维数组名作为函数参数时,如果数组的行和列均是变量,怎么办?
只看楼主 加入收藏
UCU月祭
Rank: 1
等 级:新手上路
帖 子:12
专家分:4
注 册:2012-11-6
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:8 
用多维数组名作为函数参数时,如果数组的行和列均是变量,怎么办?
我们老师叫写一个幻方的程序,需要动态申请一个空间。我想把奇数阶的幻方生成用一个用户自定义的函数写。但是参数是一个变量。这个该怎么办?
void huanfang(???)
{
    for(int y=0;y<n;y++)
    {
        for(int x=0;x<n;x++)
            k[y][x]=0;
    }
    int m,c;
    m=0,c=(n-1)/2;
    k[m][c]=1;
    for(int j=2;j<=n*n;j++)
    {
        if(m-1<0&&c+1<n&&c+1>=0)
        {
            m=n-1;c++;
        }
        else if(m-1>=0&&c+1>n-1)
        {
            m--;c=0;
        }
        else if(m-1<0&&c+1>n-1)
        {
            m++;
        }
        else if(p[m-1][c+1]!=0)
        {
            m++;
        }
        else
        {
            m--;c++;
        }
            k[m][c]=j;
    }
}
搜索更多相关主题的帖子: 怎么办 动态 用户 
2012-12-03 12:59
mmmmmmmmmmmm
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:8
帖 子:388
专家分:1809
注 册:2012-11-2
收藏
得分:4 
从楼主的程序来看
void huanfang(int k[][10])


[ 本帖最后由 mmmmmmmmmmmm 于 2012-12-3 14:39 编辑 ]

我们的目标只有一个:消灭0回复!
while(1)
++money;
2012-12-03 13:27
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:4 
calloc


[fly]存在即是合理[/fly]
2012-12-03 14:42
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:4 
说得不清不楚,我只能猜你的意图
void huanfang( int* k, int n )
然后将所有的 k[行][列] 改为 k[(行)*n+(列)]
但其中有个 else if(p[m-1][c+1]!=0),不知道你这个p是个啥屁
2012-12-03 14:53
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
调用事例
int buf[5][5];
huanfang( &buf[0][0], 5 );
2012-12-03 14:53
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
我根据你的思路重写了一个
代码还是罗嗦了点儿,但我用下班了,没时间优化了
程序代码:
#include <iostream>
#include <cassert>

template<size_t N>
void huanfang( size_t (&arr)[N][N] )
{
    assert( N>0 && N%2==1 );

    for( size_t r=0; r<N; ++r )
        for( size_t c=0; c<N; ++c )
            arr[r][c] = 0;

    size_t r=0, c=N/2;
    for( size_t i=0; i<N*N; ++i )
    {
        arr[r][c] = i+1;

        if( arr[(r+N-1)%N][(c+1)%N] == 0 )
            r=(r+N-1)%N, c=(c+1)%N;
        else
            r=(r+1)%N;
    }
}

template<typename T, size_t R, size_t C>
void printarray( const T (&arr)[R][C] )
{
    for( size_t r=0; r<R; ++r )
    {
        for( size_t c=0; c<C; ++c )
        {
            std::cout << '\t' << arr[r][c];
        }
        std::cout << '\n';
    }
    std::cout << std::endl;
}

int main()
{
    size_t buf[5][5];
    huanfang( buf );
    printarray( buf );

    return 0;
}


2012-12-03 15:36
lyj123
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:60
专家分:152
注 册:2010-11-15
收藏
得分:4 
用多维数组名作为函数参数时,如果数组的行和列均是变量,怎么办?
代码没时间看了,这个问题
    作为C++来说可以选择略显歪门邪道的方法。  首先,用变量得到数组空间的大小如  要申请int a[x][y]的动态存储区,而x,y是变量则
    const int x1=x,y1=y;
        int a[x1][y1];

这个方法虽然比较歪,但是很好用。
    也可以选择 new 建立正规的动态存储区

相互帮助

2012-12-04 20:09
wuxia111111
Rank: 2
等 级:论坛游民
帖 子:32
专家分:60
注 册:2012-11-18
收藏
得分:4 
是想传给n一个值吧。可以在主函数里这样写程序:
int main()
{
  int n;
  cout<<"请输入一个整数:";
  cin>>n;
  huanfang(n);

  return 0;
}
这样变量也可以传过去了。
2012-12-04 23:28
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
回复 7楼 lyj123
不可以的
如果是C++,必须要求是编译期常量
如果是C,本身支持变长数组

我怀疑你用的是g++,g++将C99的变长数组带入了C++中,但那不是标准的C++语法
2012-12-05 08:31
快速回复:用多维数组名作为函数参数时,如果数组的行和列均是变量,怎么办?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034354 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved