为什么或何时用指针声明int
Why or when to declare an int with a pointer?
除了持续时间之外,这两者之间还有什么区别吗?
int ptr;
int *ptr = new int;
我理解指针的概念,但我看不出用指针来转换int有多大用处。
如果不需要在创建对象的范围之外的对象,则可以在堆栈上使用该对象。
示例:
int foo(int in)
{
int i = in + 2;
return i;
}
在CCD_ 2之外不需要CCD_ 1。因此,您可以在堆栈上创建一个对象并返回其值。
如果需要在创建对象的范围之外的对象,则可以使用堆上的对象。
int* foo(int in)
{
int* ip = new int(in + 2);
return ip;
}
ip
指向的指针是从foo
返回的,预计将由调用函数使用。因此,您需要在堆上创建一个对象并返回它
这就是差异的概念方面。通常,如果您谈论的是int
,则不需要使用堆中的对象。当您需要返回一个数组时,差异就变得很重要。
int* foo()
{
int arr[] = {1, 2, 3, 4};
return arr;
}
该函数将是一个问题,因为它返回的指针在函数返回时将无效。
int* foo()
{
int* arr = new int[4]{1, 2, 3, 4};
return arr;
}
这将起作用,因为即使在函数返回后,返回的指针也会指向有效对象。调用函数必须负责释放内存。
从性能的角度可以看出差异。
考虑最坏情况场景:
int ptr;
在这种情况下,所有所需的内存都将在同一页上。
int *ptr = new int;
在这种情况下,ptr
的地址可以在一个页面上,而它所指向的存储器可以在不同的页面上,这可能导致在间接访问存储器(即*ptr
)时出现页面故障。
相关文章:
- 没有显式声明的int[]中的foreach
- 在 C++ 中声明 int 与<<
- 为什么在某些编译器中可以声明像int myarr[noconstant]这样的数组;而不是在其他编译器中?
- 'int a'声明隐藏参数
- 声明的 int 具有随机起始值
- 格式为`int Typedef my_int;`的Typedef声明
- 如何声明一个必须在C++中同时存储int和char值的2D数组
- 当我们声明 cin 为 int 并从 cin 中获取输入并在 cout 中打印 cin 时会发生什么?
- 错误:"int pow(double,int)"与上一个声明int pov(double a,int
- 在变量名后声明带有 () 的非内部类型与不使用变量名的行为不同。即 std::map<int,char>x(); - 这是怎么回事?
- 涡轮增压 这个声明“int fun-name(static int)”在C++中是否有效,为什么
- 在 c++ 中声明 int 对象
- 为什么或何时用指针声明int
- 这个声明"int(*ptr[3])();"是什么意思?
- 为什么在使用#define声明int的vector的vector时没有抛出错误
- 此类声明 int(a) 的 GCC 文档
- 为什么 p2 不是声明 int* p1, p2; 中的指针类型
- 在Xcode下的C++中声明int的数组
- 双指针二维数组声明int** seq=new int* [n];
- 声明 int 数组