假设 f() 返回一个对整数 ( int & f();) 的引用,f()+=5;并且f()=f()+5;是不同的,解释如何并给出 f() 的伪代码来说明这种差异。
如果 p 是 an int *p,C++ 中的这两条语句有什么区别:
if (p!=NULL && *p !=0)....
if (*p !=0 && p !=NULL)....
首先,您可以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 的情况下,我不会使用第二个。
f()+=5如果在每次调用时返回对不同整数的引用,则可能与f()= f()+5不同。f()这只有f()在每次调用时从某个不同的全局变量中读取时才会发生。
if (p!=NULL && *p !=0)和之间的区别在于if (*p !=0 && *p !=NULL),第一个检查是否p为 null,然后检查指向的是否int为pis 0。第二个只检查指向的是否int是p(0并执行此检查两次)。