#include<iostream>
using namespace std;
char* function1()
{
char* var = new char;
var[0] = 'q';
var[1] = 'p';
return var;
}
int* function2()
{
int* var = new int;
var[0] = 12;
var[1] = 20;
return var;
}
int main() {
cout << function1() << endl;
cout << function2() << endl;
// your code goes here
return 0;
}
输出:
qp
0x9cf9018
这个节目有一些疑问。任何讨论都将非常有助于理解这些事情。
1. char* var = new char;
根据我目前的理解,这句话说:给我一个内存位置的地址,我可以在其中存储一个字符。所以编译器将分配一个字节的内存。那么为什么我们能够将任意数量的字符存储为:
var[0] = 'q';
var[1] = 'p';
var[1] = 'r';
如果答案是因为连续的内存位置,我们可以访问下一个内存,那么我们不是在访问没有给我们的东西。并且在不知不觉中覆盖了属于别人的东西。如果答案再次是肯定的,那么为什么编译器允许我们这样做。以及如何避免这件事。另外,如果我们不避免这件事,我们可以在程序的多次运行中得到一些意想不到的结果吗?
2. The answered behavior of above point is same for int* var = new int; and char* var = new char, or is different. And if is different, what is the difference?
3. why one cout is printing value, while other printing address?