1

f()が整数(int & f();)への参照を返し、異なるf()+=5;f()=f()+5;仮定して、その方法を説明し、この違いを説明するためにf()の疑似コードを与えます。

pがである場合int *p、C++でのこれら2つのステートメントの違いは何ですか。

if (p!=NULL && *p !=0).... 
if (*p !=0 && p !=NULL)....
4

2 に答える 2

2

最初に、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番目のものを使用しません。

于 2012-05-11T04:08:19.410 に答える
1

f()+=5呼び出しごとに異なる整数への参照が返された場合、 f()= f()+5とは異なる可能性があります。これは、呼び出されるたびに異なるグローバル変数から読み取られたf()場合にのみ発生する可能性があります。f()

if (p!=NULL && *p !=0)との違いif (*p !=0 && *p !=NULL)は、最初のものpがnullであるかどうかをチェックし、次にそれintp指すがであるかどうかをチェックすることです0。2つ目は、intp指しているかどうかをチェックするだけです0(そして、このチェックを2回実行します)。

于 2012-05-11T04:08:10.430 に答える