假设f()返回对整数(int & f();
)的引用,f()+=5;
和f()=f()+5;
不同,请解释如何为f()提供pesudo代码以说明这种差异
如果p是int *p
,那么这两个语句在C ++中有什么区别:
if (p!=NULL && *p !=0)....
if (*p !=0 && p !=NULL)....
答案 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]
对于您的第二个问题,提示是*p
和p
之间的差异。例如,在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
指向的p
是0
(并执行此检查两次)。