给出一段代码:
void twoDimFunc(int (*p)[HEIGHT])
{
int i = 0, j = 0;
for (;i < WIDTH ; i++)
for (;j < HEIGHT; j++)
{
*((int*)p + i * HEIGHT + j) = -1;
}
}
在main()程序中我调用这个函数,然后输出矩阵,然后我在stdout中得到以下矩阵:
-1 -1 -1
0 0 0
但是,对于此代码
void twoDimFunc(int (*p)[HEIGHT])
{
int i = 0, j = 0;
for (i = 0;i < WIDTH ; i++)
for (j = 0;j < HEIGHT; j++)
{
*((int*)p + i * HEIGHT + j) = -1;
}
}
输出
-1 -1 -1
-1 -1 -1
循环圆括号内的初始化是否与循环前的初始化方式不同?
感谢。
答案 0 :(得分:3)
这两个代码有不同的行为。在这段代码中:
void twoDimFunc(int (*p)[HEIGHT])
{
int i = 0, j = 0;
for (i = 0;i < WIDTH ; i++) //loop 1
for (j = 0;j < HEIGHT; j++) //j = 0 at each turn of loop 1
{
*((int*)p + i * HEIGHT + j) = -1;
}
}
在您给出的第一个代码中, j
永远不会在0处重新初始化:
void twoDimFunc(int (*p)[HEIGHT])
{
int i = 0, j = 0;
for (;i < WIDTH ; i++) //loop 1
for (;j < HEIGHT; j++) //j isn't initialized to 0 for each turn of loop 1
{
*((int*)p + i * HEIGHT + j) = -1;
}
}
答案 1 :(得分:0)
在循环之前和括号内初始化不会产生语义差异(也许它会对优化程序产生影响,谁知道......)。
但是在你的第一个嵌套循环中,你不必每次都重新初始化j
,以免内部循环再次执行。