【发布时间】:2021-12-25 09:06:13
【问题描述】:
我希望我的矩阵如下所示:
1 2 3
X X X
X X X
当 X 为随机数时。
我尝试了以下方法:
void initMat(int *mat, int rows, int cols)
{
*(mat + 0) = 1;
*(mat + 1) = 2;
*(mat + 2) = 3;
for (int i = 0; i < rows * cols - 3; i++)
{
*(mat + 3) = rand() % 6;
mat++;
}
}
然后我调用函数:
initMat((int *)startValues, 3, 3);
当我使用以下函数打印我的矩阵时:
void printMat(const int *mat, int rows, int cols)
{
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
printf("%4d", *mat);
mat++;
printf(" ");
}
printf("\n");
}
}
我得到了一些看起来像二维数组的东西,正如我真正想要的那样,例如:
startValues:
1 2 3
4 1 5
4 4 5
但是当我尝试用(在同一个主目录中,在矩阵启动后)打印它时
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
printf("%4d", startValues[i][j]);
}
printf("\n");
}
我明白了:
VALUES:
1 2 3
3 4 1
1 5 2
为什么会这样?为什么值不同,有些看起来相同。我应该如何达到每个值?我也尝试使用公式:
m+ cols*i + j //(in my case startValues + 3*i+j in the last loop)
但是它给了我非常大的随机数,我不确定什么时候需要使用它来代替 mat[i][j]。
【问题讨论】:
-
减一。请将
i <= rows * cols - 3;中的结束条件改为i < rows * cols - 3; -
@WeatherVane 已更改。
-
旁白:请不要对发布的代码进行“交互式进度更新”。
-
无法从包含您的 sn-ps 的“想象”代码中复制。请以文本形式发布Minimal Reproducible Example,最短的完整代码,显示您尝试过的内容。您是否将 incremented
mat传递给另一个函数? -
@WeatherVane 这是我刚刚拆分解释的代码。增加垫子是什么意思?
标签: arrays c pointers matrix multidimensional-array