Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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++;密码?_C++_Arrays_Function Call - Fatal编程技术网

C++ 数组的值在以下c++;密码?

C++ 数组的值在以下c++;密码?,c++,arrays,function-call,C++,Arrays,Function Call,编译以下程序时,如果break float而break,则输出为 #include<iostream> using namespace std; string s[5]={"if","int","float","while","break"}; string & blast(int i){ return s[i];} int main() { for (int i =

编译以下程序时,如果break float而break,则输出为

#include<iostream>
using namespace std;

string s[5]={"if","int","float","while","break"};
string & blast(int i){ return s[i];}
int main()
{
    for (int i = 0; i < 5; i++ )
         if( i % 3 == 1 )
             blast( i ) = s[ 5-i ];
    for (int i = 0; i < 5; i++ )
        cout << s[ i ] << " ";
    cout<<endl;
    return 0;
}
但产出与此不符

我不明白这件事。。
请帮帮我。

正如你自己写的,当
i
等于
1

blast[1]= s[4] = "break"
so, s[1] = "break"
因此
s[1]
包含字符串
“break”
。之后,数组不包含字符串
“int”
。然后当
i
等于
4

blast[4]= s[4] = s[1] = "break"

提示:如果分配给可变引用,会发生什么情况?
string&blast(inti)
返回对数组中字符串的引用,然后将新字符串分配给该字符串,例如
blast(i)=s[5-i]
s[i]=s[5-i]相同
此外,如果您将代码隔开一点,它的可读性将大大提高(特别是对于老年人来说),例如
for(inti=0;i<5;i++)
if(i%3==1)
,等等。您可能想要
std::swap(blast(i),s[5-i])?请注意适当的格式。这样代码的可读性就会大大提高。我为你们修正了换行符和缩进,但你们的括号仍然遵循不一致的模式。在开始括号之后或结束括号之前使用空格是很不寻常的,但我不太在乎是否至少保持它的一致性(要么两者都保持一致,要么不保持一致,然后所有对都保持一致)。应始终放置运算符周围的空格。关于大括号:我建议至少在表达式包含两行以上(如编辑后的第一个for循环)时放置大括号,即使不需要也应放置大括号。对于if-else链的所有块,如果至少有一个需要,则应放置大括号。有一些编码约定(比如MISRA)总是强制使用大括号,这使得您的代码健壮。G反对写得不好的宏(承认不是很有意义,但可能类似于增量(X,Y)++X;++Y;
)或忘记将它们放在添加更多表达式上。
blast[4]= s[4] = s[1] = "break"