我一直在使用Java/C++来回移动,所以我搞砸了我的控制台输出并意外地编写了如下行:
cout << "num" + numSamples << endl;
cout << "max" + maxSampleValue << endl;
Run Code Online (Sandbox Code Playgroud)
每一个都给了我在程序中的一些其他字符串.我现在意识到我的错误,但是C++解释这些行是什么,以便它们在我的程序中输出不同字符串的不同部分?
Xaq*_*aqq 36
这有一个简单的原因:
"num"并且"max"是字符串文字.他们的类型是const char *.假设numSamples是一个整数,你所做的是指针算术.
您基本上打印一个指向"num"+ numSamples字节的字符串.
如果你这样做cout << "num" + 1 << endl会打印"um".
您可能已经想到了,但正确的方法是: cout << "num" << numSamples << endl;
另外,你问:
但是什么是C++解释这些行,以便它们在我的程序中输出不同字符串的不同部分?
如前所述,"num"是一个字符串文字.通常,字符串文字位于二进制程序中的相同位置:.rodata.所有其他字符串文字都位于此区域中,因此当您将指针推进一定量的字节时,您可能会指向其他一些字符串文字,从而打印(部分)它们.
Ale*_*exD 30
它只是指针算术.例如,
cout << "num" + 1 << endl;
Run Code Online (Sandbox Code Playgroud)
会打印一个字符串((address of)"num" + 1),即"um".
如果我们添加的值超过字符串的长度,那么我们有未定义的行为.
| 归档时间: |
|
| 查看次数: |
1514 次 |
| 最近记录: |