假设 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
为p
is 0
。第二个只检查指向的是否int
是p
(0
并执行此检查两次)。