有关功能和指针的功课需要帮助

时间:2012-05-11 03:57:58

标签: c++ function

假设f()返回对整数(int & f();)的引用,f()+=5;f()=f()+5;不同,请解释如何为f()提供pesudo代码以说明这种差异

如果p是int *p,那么这两个语句在C ++中有什么区别:

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

2 个答案:

答案 0 :(得分: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]

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

答案 1 :(得分:1)

如果f()+=5在每次调用时返回对不同整数的引用,则

f()可能与f() = f() + 5不同。只有f()从某个全局变量读取时才会发生这种情况,每次调用它时都会有所不同。

if (p!=NULL && *p !=0)if (*p !=0 && *p !=NULL)之间的区别在于第一个检查p是否为空,然后检查int指向的p是否为空0。第二个仅检查int指向的p0(并执行此检查两次)。