function()が初めて呼び出されると、Cのグローバル変数がゼロに初期化されるため、「a」はNULLになります。
次に、「Test1」を指すように設定します。2回目にfunction()が呼び出されても、「a」はNULLではなく「Test1」へのポインタであるため、「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