首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++是否允许VLAs作为函数参数?

C++是否允许VLAs作为函数参数?
EN

Stack Overflow用户
提问于 2013-07-02 11:04:10
回答 1查看 401关注 0票数 0

给定的代码用于生成一个幻方,在其中我使用VLA作为函数。

create_magic_square(int n,int magic_squaren) print_magic_square(int n,int magic_squaren)

代码语言:javascript
复制
 #include <stdio.h>

void create_magic_square(int n, int magic_square[n][n]);
void print_magic_square(int n, int magic_square[n][n]);

int main()
{
    int size;
    printf("This program creates a magic square of a specified size");
    printf("The size be an odd number between 1 and 99");

    printf("Enter the size of magic square: ");
    scanf("%d", &size);
    if(size%2 == 0 || size < 0 || size > 99)
    {
        printf("Wrong Entry!!!");
        return 0;
    }

    int square[size][size];
    for( int i = 0; i < size; i++)
        for(int j = 0; j < size; j++)
            square[i][j] = 0;

    create_magic_square(size, square);
    print_magic_square(size, square);

    return 0;   
}

void create_magic_square(int n, int magic_square[n][n])
{
    int row = 0, col = n/2;
    magic_square[row][col] = 1;
    while(magic_square[row][col] <= n*n)
   {
        int new_row = ((row - 1) + n) % n;
        int new_col = ((col + 1) + n) % n;
        if(magic_square[new_row][new_col] == 0)
        {
            magic_square[new_row][new_col] = magic_square[row][col] + 1;
            row = new_row;
            col = new_col;
        }
        else if(magic_square[new_row][new_col] != 0)
        {
            magic_square[row + 1][col] = magic_square[row][col] + 1;
            row = row + 1;
        }
    }
}

void print_magic_square(int n, int magic_square[n][n])
{
    for( int i = 0; i < n; i++)
   {
        for(int j = 0; j < n; j++)
           printf("%d   ", magic_square[i][j]);
        printf("\n\n"); 
    }   

}

当文件以扩展名.cpp保存时,编译时会出现以下错误:

当我将这个扩展更改为.c时,它工作得很好。

背后的原因是什么?

我认为在C++中是不允许的,对吗?

注意:检查此链接,将VLAs作为参数:

]" instead of an integer for a VLA array parameter of a function?

EN

回答 1

Stack Overflow用户

发布于 2013-07-02 11:08:39

您不能这样使用C风格的数组,除了第一个范围之外,所有的范围都必须是编译时常量。

您可以做的是传递指向一维n*n数组的int *magic_square,并使用一个简单的索引映射函数来获得单元格的线性索引。

你把这个问题标记为C++,所以你应该知道

代码语言:javascript
复制
int square[size][size];

也不是有效的C++,尽管它是有效的C99,一些编译器通过扩展支持它。

对于C++,我建议使用std::vector<int> vec(size*size)作为持卡器。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17423902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档