为什么或何时用指针声明int

Why or when to declare an int with a pointer?

本文关键字:声明 int 指针 何时用 为什么      更新时间:2023-10-16

除了持续时间之外,这两者之间还有什么区别吗?

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)时出现页面故障。