以下代码是否定义良好?
print_factor(p(++k), p(--k));
八度音中的事情怎么样?
答案 0 :(得分:3)
不要这样做!这些代码在MATLAB和Octave中都有效,但行为却截然不同。
<强> MATLAB 强>:
您拥有的代码实际上是有效 MATLAB代码。但是,它没有达到您的预期。
在许多语言中,++k
表示递增k
并将其返回。在MATLAB中,++k
与k
相同,因为在MATLAB中:3 == +3 == ++3 == +++++++3
。 --k
也是如此。这是--k == -(-k) == +k == k
。同样,在许多语言中k++
表示返回k
,然后递增它。但是在MATLAB中,k++
和k--
语法无效并导致语法错误。
您的代码(在MATLAB中)相当于:
print_factor(p(k), p(k));
使用p
和print_factor
的两个示例函数在MATLAB中测试代码:
p = @(x) 2*x;
print_factor = @(x,y)disp([x,y]);
k = 2;
print_factor(p(++k), p(--k));
4 4
k
k =
2
<强>八度:强>
在Octave中,运算符是定义的,并且从左到右进行了计算,但我不认为关于增量运算符的official documentation说明了这一点。它可能与平台有关,就像在C ++中一样。但是,它可能与其他表达式的计算方式相同,请参见底部的示例。
您可以在线测试here。
Octave完全相同的代码:
p = @(x) 2*x;
print_factor = @(x,y)disp([x,y]);
k = 2;
print_factor(p(++k), p(--k));
6 4
k
k = 2
print_factor(p(++k), p(++k));
6 8
k
k = 4
正如Dan评论的那样:在Octave中编写不遵循MATLAB语法的代码并不是一个好主意。如果你想在MATLAB中运行它,你将不得不重写它。