Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 关于函数和指针的家庭作业需要帮助吗_C++_Function - Fatal编程技术网

C++ 关于函数和指针的家庭作业需要帮助吗

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()读取某个全局变量时,才会发生这种情况,该变量每次调用

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()
读取某个全局变量时,才会发生这种情况,该变量每次调用时都是不同的


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]