0

如何在 c 中仅更改矩阵的一部分(我实际上在 Objective-C 中,但在 c 中使用矩阵)。例如:

NSInteger tempMapMatrix[100][100] =
   {{0,0,1,1,2,2,1,1,0,2,4,4,4,0,0,1,2,2,1,0,0,0,0,0,0},
    {0,1,1,2,3,2,1,1,4,4,3,4,4,0,0,1,2,2,1,0,0,0,0,0,0},
    {1,1,2,3,3,2,1,4,1,3,3,4,4,0,0,1,2,2,1,0,0,0,0,0,0},
    {1,1,3,3,3,2,4,1,1,1,4,4,4,0,0,1,2,2,1,0,0,0,0,0,0},
    {0,1,1,2,2,2,4,4,4,4,4,4,4,0,0,1,1,1,1,0,0,0,4,4,0},
    {0,0,1,1,2,2,1,0,0,2,3,4,4,0,0,0,0,0,0,0,0,0,4,4,0},
    {4,4,1,1,2,2,1,1,0,1,1,0,4,0,0,0,0,0,0,0,0,0,4,4,4},
    {0,4,1,2,2,2,1,1,0,4,4,4,4,4,4,4,0,0,0,0,1,0,0,0,0},
    {0,1,2,2,2,2,1,1,0,1,2,4,4,0,0,4,0,3,3,3,3,3,3,3,0},
    {0,1,2,2,2,2,1,1,0,1,2,4,4,0,0,4,4,3,2,2,2,2,2,3,0},
    {0,1,2,2,2,2,1,1,0,1,2,4,4,0,0,4,4,3,2,3,3,3,2,3,0},
    {0,1,2,2,2,2,1,1,0,1,2,4,4,0,0,4,4,3,2,3,2,2,2,3,0},
    {0,1,2,2,2,2,1,1,0,1,2,4,4,0,0,4,3,3,2,3,2,3,3,3,0},
    {0,1,2,2,2,2,1,1,0,1,2,4,4,0,4,4,1,2,2,3,2,0,0,0,0},
    {0,1,2,2,2,2,1,1,0,1,2,4,4,0,4,3,3,3,3,3,0,0,0,0,0},
    {0,1,2,2,2,2,1,1,0,1,2,4,4,4,4,0,0,0,0,0,0,0,0,0,0},
    {0,1,2,2,2,2,1,1,0,1,2,4,4,0,0,0,1,0,0,0,0,0,0,0,0},
    {0,1,2,2,2,2,1,1,0,1,2,4,4,0,0,0,1,0,0,0,1,1,1,0,0},
    {0,1,2,2,2,2,1,1,0,1,2,4,4,0,0,1,0,0,0,0,0,1,1,0,0},
    {0,0,1,2,2,2,1,0,0,0,4,4,4,0,0,1,1,0,0,0,0,0,1,0,0}};

然后我想改变第一对整数(x和y):

tempMapMatrix[100][100] =
   {{5,5,5,5,5,1,2,3},
    {5,5,5,5,5,1,2,3},
    {5,5,1,1,1,1,2,3},
    {5,5,1,5,5,1,2,3},
    {5,5,1,1,1,1,2,3},
    {5,5,5,5,5,5,5,5},
    {5,5,5,5,5,1,2,3},
    {5,2,2,2,5,1,2,3},
    {5,2,5,2,5,1,2,3},
    {5,2,2,2,5,1,2,3}};

但我收到一个错误(预期表达式)。我试过了

tempMapArray = stuff;
tempMapArray[][] = stuff;

但没有一个工作。

有什么办法可以改变矩阵中的前几个整数?

4

2 回答 2

1

你需要遍历它们,这是 C,你没有语法糖来分配你想要的数组片段。例如,如果您想更改每行的每个第一个元素,您可以执行以下操作:

for (int = 0; i < 100; ++i) {
 tempMatrix[i][0] = 5;
}

所以对于每一行的前几行你应该做

for (int = 0; i < 100; ++i) {
 tempMatrix[i][0] = 5;
 tempMatrix[i][1] = 5;
}

等等。

于 2012-12-03T00:52:05.240 回答
0

您必须单独访问和更改矩阵中的每个元素。

IE:

tempMapMatrix[0][0] = 5;
tempMapMatrix[0][1] = //...

没有办法在 C 中“批量更改”数组(一维或 n 维)的内容。

实现这个效果最简单的方法是写一个for循环,遍历二维数组的内容,在需要的地方插入需要的值。

于 2012-12-03T00:54:27.700 回答