C 在while循环中创建结构指针

C 在while循环中创建结构指针,c,pointers,C,Pointers,我刚刚意识到,在while循环中,当我创建一个结构的指针时,当循环结束时,指针似乎没有定义。我不确定是否存在这样一种情况,即在中创建指针,而在它之外不能使用循环。 以下是我代码的一部分: if('D'==Status) //depature { while(Top(T)->CarLicense != CarLin) { struct CarNode * tmp; tmp = Top(S); Push(TopAndPop(S), T);

我刚刚意识到,在while循环中,当我创建一个结构的指针时,当循环结束时,指针似乎没有定义。我不确定是否存在这样一种情况,即在中创建指针,而在它之外不能使用循环。 以下是我代码的一部分:

if('D'==Status) //depature
{
    while(Top(T)->CarLicense != CarLin) {
        struct CarNode * tmp;
        tmp = Top(S);
        Push(TopAndPop(S), T);
        tmp->Movement++;
    }
    printf("Moved %d, bye!\n",tmp->Movement);
    DisposeCar(TopAndPop(T));
    while(!(IsEmpty(T))) {
        struct CarNode * tmp2;
        tmp2 = Top(T);
        Push(TopAndPop(T),S);
    }
}

在这里,在printfMoved%d中,再见\n、 tmp->移动;,tmp似乎没有定义

因为tmp是在while块中声明和定义的,所以当循环完成时,它将超出范围。您需要在循环上方的行中声明它,这样它在到达printf时仍然可见。

那么,我们可以说while循环中声明的任何变量只存在于循环中吗?为了安全起见,在任何{}子块中,是的。。。如果您只是声明了自动变量而没有初始化它们,它们可能会看到以前的值,但通常它只是垃圾,可能会导致seg错误等。完全基本的C可能重复:如果您有一个构造,如{int x;…},则不能在大括号外使用x。在你开始学习指针之前,你必须意识到这一点。