C++ 关于函数和指针的家庭作业需要帮助吗
a指定f()返回对整数(C++ 关于函数和指针的家庭作业需要帮助吗,c++,function,C++,Function,a指定f()返回对整数(int&f();)的引用,f()+=5和f()=f()+5是不同的,请解释如何使用,并给出f()的伪代码来说明这种差异 如果p是一个int*p,这两个语句在C++中的区别是什么: if (p!=NULL && *p !=0).... if (*p !=0 && p !=NULL).... 如果每次调用时f()返回对不同整数的引用,则f()+=5可能不同于f()=f()+5。只有当f()读取某个全局变量时,才会发生这种情况,该变量每次调用
int&f();
)的引用,f()+=5代码>和f()=f()+5代码>是不同的,请解释如何使用,并给出f()的伪代码来说明这种差异
如果p是一个int*p
,这两个语句在C++中的区别是什么:
if (p!=NULL && *p !=0)....
if (*p !=0 && p !=NULL)....
如果每次调用时f()
返回对不同整数的引用,则f()+=5
可能不同于f()
=f()
+5。只有当f()
读取某个全局变量时,才会发生这种情况,该变量每次调用时都是不同的
if(p!=NULL&&*p!=0)
和if(*p!=0&&*p!=NULL)
之间的区别在于第一个检查p
是否为NULL,然后检查p
指向的int
是否为0
。第二个检查只检查p
指向的int
是否为0
(并执行两次此检查)。在第一个检查中,可以让f()
声明两个静态变量和指向其中一个的静态指针
然后为每个调用交替返回它们,类似于(因为它是家庭作业,所以是伪代码):
或者,更糟糕的是:
def f():
static var1 = array[1024];
static idx = -1;
idx = (idx + 1) % 100
return reference of var1[idx]
对于第二个问题,提示是*p
和p
之间的区别。例如,如果p
本身可能为空,我就不会使用第二个。值得一提的是,在第一个案例中p=NULL将始终首先计算,如果结果为false
,*p!=0
将完全不执行。(即,指针只有在不为NULL
时才会取消引用)。标准保证了这种短路,因此第一种情况保证有效。@Als:只要p
指向有效对象或为NULL,它就保证有效。第二个问题只有在p
指向有效对象时才能保证有效。第二个问题是输入错误,如果(p!=NULL&&*p!=0)。。。。如果(*p!=0&&p!=NULL)。。。。伙计们,现在有什么区别了?@catvsrat:Changing*p=0&&p=空
到*p=0&p=NULL
完全不会改变其含义。它仍然是一个需要p=NULL
,它包含一个冗余的子表达式(*p!=NULL
和p!=NULL
如果*p!=0
的计算结果为true(在表达式定义了行为的所有情况下),那么这两个表达式的计算结果都将始终为true,因此您实际上拥有&&true
,这对表达式没有任何价值)。
def f():
static var1 = array[1024];
static idx = -1;
idx = (idx + 1) % 100
return reference of var1[idx]