#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;
これまでの私の理解では、このステートメントは次のように述べています。文字を保存できるメモリ位置のアドレスを教えてください。そのため、コンパイラは 1 バイトのメモリを割り当てます。次に、任意の数の文字を次のように格納できる理由:
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?