第一次调用 function() 时,'a' 将为 NULL,因为 C 中的全局变量被初始化为零。
然后将其设置为指向“Test1”。第二次调用 function() 时,'a' 仍然是指向“Test1”的指针,而不是 NULL,因此您将其设置为“Test2”。以后的每个调用基本上都不会做任何事情,一次又一次地将“a”设置为“Test2”。
如果这不是您所看到的,那么与您在上面发布的代码相比,您的实际代码会有所不同。例如,如果“char *a”在函数内部,那么它是一个局部变量,而不是全局变量,并且在函数进入时它将具有未定义的值,并且每次函数退出时也会丢失其值。
下面的代码在它下面产生了输出,正如它应该的那样。
#include <stdlib.h>
#include <stdio.h>
char *a;
void function();
int main( int argc, const char *argv[] )
{
function();
function();
function();
function();
return 0;
}
void function()
{
printf( "function: a=%s", (a ? a : "NULL") );
if(a == NULL)
{
a = "Test1";
}
else
{
a = "Test2";
}
printf( " exiting a=%s\n", (a ? a : "NULL") );
}
This produces the following output:
function: a=NULL exiting a=Test1
function: a=Test1 exiting a=Test2
function: a=Test2 exiting a=Test2
function: a=Test2 exiting a=Test2