【发布时间】:2021-05-25 06:31:25
【问题描述】:
谁能给我解释一下,为什么下面的代码有不同的输出?
void GenerateMatrix(int mat[][MaxSize],int ran[],const int rows,const int cols)
{
int i,k=0;
while (i<rows)
{
int j=0;
while (j<cols)
{
mat[i][j]=ran[k];
j,k++;
}
i++;
}
}
和正确的一个
void GenerateMatrix(int mat[][MaxSize],int ran[],const int rows,const int cols)
{
int k=0;
for (int i=0; i<rows;i++)
{
for (int j=0; j<cols;j++)
{
mat[i][j]=ran[k];
k++;
}
}
}
ran[] 是一个在 main() 中声明的数组
int main()
{
srand(time(NULL));
int a[10];
for (int i=0;i<10;i++)
{
a[i]={(rand() % 20-0+1)+1};
cout<<a[i]<<endl;
}
.
.
.
}
第一个总是输出奇怪的随机数,不在我在 main() 中为 a[] 设置的随机数范围内。 第二个是正确的。 我在第一个函数中更改了 k 的声明范围,仍然相同。我只是想知道女巫的部分结果是什么?
【问题讨论】:
-
你打算
j,k++;做什么?您是否进行了调试以观察变量是否按预期变化? -
int i, k = 0等价于int i; int k = 0,因此i在您访问它时未初始化,从而触发未定义的行为。你的意思可能是int i = 0, k = 0。 -
还有
j,k++等价于k++(假设j的评估没有副作用),不是一个很有用的语句。 -
谢谢,我一直认为我可以同时声明两个整数...,如果我想同时增加两个计数器变量,有没有更好的方法来代替
j,k++? -
错误,
j++; k++;?