初始化for循环中的变量(圆括号内)和for循环之前初始化变量之间有什么区别吗?

时间:2014-04-17 09:54:27

标签: c pointers

给出一段代码:

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

循环圆括号内的初始化是否与循环前的初始化方式不同?

感谢。

2 个答案:

答案 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,以免内部循环再次执行。

相关问题