1

假设 f() 返回一个对整数 ( int & f();) 的引用,f()+=5;并且f()=f()+5;是不同的,解释如何并给出 f() 的伪代码来说明这种差异。

如果 p 是 an int *p,C++ 中的这两条语句有什么区别:

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

2 回答 2

2

首先,您可以f()声明两个静态变量和一个指向其中一个的静态指针。

然后为每次调用交替返回它们,例如(伪代码,因为它是家庭作业):

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]

*p对于您的第二个问题,提示是和之间的区别p。例如,在p它本身可能为 NULL 的情况下,我不会使用第二个。

于 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,然后检查指向的是否intpis 0。第二个只检查指向的是否intp0并执行此检查两次)。

于 2012-05-11T04:08:10.430 回答