f()が整数(int & f();)への参照を返し、異なるf()+=5;とf()=f()+5;仮定して、その方法を説明し、この違いを説明するためにf()の疑似コードを与えます。
pがである場合int *p、C++でのこれら2つのステートメントの違いは何ですか。
if (p!=NULL && *p !=0)....
if (*p !=0 && p !=NULL)....
最初に、f()2つの静的変数とそれらの1つへの静的ポインターを宣言することができます。
次に、呼び出しごとに交互にそれらを返します。たとえば、(宿題なので擬似コード):
def f():
static var1 = 0;
static var2 = 42;
static pointer curr_var = reference of var1
if curr_var == reference of var1:
curr_var = reference of var2
else:
curr_var = reference of var1
return curr_var
さらに悪いことに:
def f():
static var1 = array[1024];
static idx = -1;
idx = (idx + 1) % 100
return reference of var1[idx]
*p2番目の質問のヒントは、との違いpです。たとえば、pそれ自体がNULLになる可能性がある場合は、2番目のものを使用しません。
f()+=5呼び出しごとに異なる整数への参照が返された場合、 f()= f()+5とは異なる可能性があります。これは、呼び出されるたびに異なるグローバル変数から読み取られたf()場合にのみ発生する可能性があります。f()
if (p!=NULL && *p !=0)との違いif (*p !=0 && *p !=NULL)は、最初のものpがnullであるかどうかをチェックし、次にそれintがp指すがであるかどうかをチェックすることです0。2つ目は、intがp指しているかどうかをチェックするだけです0(そして、このチェックを2回実行します)。