从C ++中的switch case返回二维数组

时间:2012-01-30 22:16:49

标签: c++ multidimensional-array switch-statement cocos2d-x

我正在用cocos2dx编写一个游戏,而我正在尝试重构一个被调用几次的方法。我想从一个cartype

的枚举中返回一个二维数组

我怎样才能得到类似下面的内容?

int Vehicle::getVehicle(VehicleTypes vehicletypes)
{

int vehicle[8][8] = {0};

switch (vehicleType) {
    case Car:
            // --- ARRAY 1 ------

            vehicle = {
                { 0,0,0,0,0,0,0,0 },
                { 0,0,1,2,5,8,0,0 },
                { 0,0,5,3,4,5,0,0 },
                { 0,0,0,6,0,7,0,0 },
                { 0,0,0,0,0,0,0,0 },
                { 0,0,0,0,0,0,0,0 },
                { 0,0,0,0,0,0,0,0 },
                { 0,0,0,0,0,0,0,0 },
            };
            break;
    case Bus:
        {
            // --- ARRAY 2 ------

            Vehicle = {
                { 0,0,0,0,0,0,0,0 },
                { 0,0,0,0,1,2,0,0 },
                { 0,0,3,4,5,0,0,0 },
                { 0,0,6,8,7,0,0,0 },
                { 0,0,0,0,0,0,0,0 },
                { 0,0,0,0,0,0,0,0 },
                { 0,0,0,0,0,0,0,0 },
                { 0,0,0,0,0,0,0,0 },
            };
            break;
        }
    default:
        break;
    }

return vehicle;
}

谢谢

2 个答案:

答案 0 :(得分:1)

typedef const int (*matrix_ptr)[8];

演示:http://ideone.com/i1Tc2

答案 1 :(得分:0)

为什么使用数组?您应该使用其中一个STL容器,例如矢量。无论哪种方式,C ++中的2D int数组基本上都是指向int的指针。函数的调用者需要在堆或堆栈上提供已分配的2D数组,并将其作为输入/输出参数传递,或让“callee”(此函数)在堆上分配2D数组并将其传递回呼叫者。如果是后一种情况,那么调用者现在负责释放内存。