Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.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++_Pointers - Fatal编程技术网

C++ 在这个真正允许的函数中,我们有未定义的行为

C++ 在这个真正允许的函数中,我们有未定义的行为,c++,pointers,C++,Pointers,对于交换功能,我们有两种选择: 参考样式: void swap (int &a, int &b) { int temp; temp = b; b = a; a = temp; } 和指针样式: void swap (int *a, int *b) { int temp; temp = *b; *b = *a; *a = temp; } ref样式绝对合法,但指针样式在我们尝试使用时有一些问题 此函

对于交换功能,我们有两种选择: 参考样式:

void swap (int &a, int &b)
{
   int temp;

   temp = b;
   b   = a;
   a   = temp;   
}
和指针样式:

void swap (int *a, int *b)
{
   int temp;

   temp = *b;
   *b   = *a;
   *a   = temp;   
}
ref样式绝对合法,但指针样式在我们尝试使用时有一些问题 此函数变量通过值传递,而不是通过引用传递,即使它们是指针-
事实上,我们试图在局部变量的函数之外使用它的内存, 也许有一天,在某些机器上,我们有未定义的行为,代码也适用于示例: 在此代码中:

main()
{
//
{
    int i=12;
    int *j=&i;
}
//in this area, there is not variables i and j, but phisically threre is 
// unsafe-relationship between this address: &i and what point to (12) , 
//any more logic according to this assumtion may be work 
//but not safe -in the scene of undefined behavior- 

我不知道你是从哪里得到关于函数外的句子的。你不应该相信他们,因为那句话是错误的

它应该是“在函数返回调用未定义行为后访问局部变量或参数”。(这是我自己的话。)


要获得官方措辞,请看C++标准。要查找的关键字是生存期、存储持续时间和未定义的行为。

“我们试图在局部变量的函数之外使用其内存”哪个局部变量?不清楚您在说什么、正在谈论什么或您在问什么。请写更多、更短、更清楚的句子。还可以举一个“use”的例子。在这两种情况下,调用方都负责传递有效的参数,即确保
a
b
引用或指向函数返回后生命周期延长的对象。只要它能做到,你的函数的两种形式都被定义得很好。“菲利普斯我写的MySistLL是不可理解的。注意,如果C++没有C,那么就可以指向最近的C++标准。作为一个一般规则:除非问题被标记为[语言律师],否则不要相信问题中的措辞。答案中的措辞更加可信。它没有错,只是含糊不清,一个可能的意思(大概是预期的意思)是正确的。给定
void f(){int x=1,y=2;swap(x,y);}
,您可能认为
swap
的执行在
f
内部,因此局部变量
x
y
在其函数内部访问。@hvd您的解释模糊了概念。有函数的作用域,也有函数的执行。“函数里面”这个词很含糊,我认为它们是错误的。当试图理解正在发生的事情时,混合这些概念将导致大问题。