我怀疑,因为我们知道Pointer是一个存储地址的变量。 我可以使用
在该地址存储值cin>>(*p);
不使用任何其他正常变量。 下面的代码解释相同:
#include'iostream'
int main()
{
long long *p;
cin>>(*p);
cout<<(*p);
return 0;
}
这样存储变量是对的吗?
如果我们可以存储这样的值,那么我们可以节省大量内存,因为我们只需要为指针变量分配内存。这远远小于普通长多数据类型的大小。
答案 0 :(得分:2)
指针有一个未定义的值,因此任何在该地址写入的尝试都将导致未定义的行为。
更好:
int main()
{
long long *p = new long long(); // heap allocation
cin>>(*p);
cout<<(*p);
delete p;
return 0;
}
OR
int main()
{
long long p; // stack variable
cin>>p;
cout<<p;
return 0;
}
答案 1 :(得分:2)
左栏使用以下代码:
int main() {
long long p;
std::cin >> p;
std::cout << p;
}
使用long long p
来存储数据,它为p
分配8个字节的空间,并在程序完成时释放该内存。
右栏正在使用你的代码(我做了一些改动/)
int main() {
long long *p = new long long();
std::cin >> *p;
std::cout << *p;
delete p;
}
它为32位机器上的指针分配4个字节,或者为64位机器上的指针分配8个字节。当您使用指针时,必须为其分配一个内存位置以便存储数据,因此它将在堆上为long long类型分配另外8个字节的内存。所以后者使用更多的内存。
为了提高内存效率,你应该坚持使用long long p
,避免使用指针,再加上为指针分配和释放内存的速度很慢。