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

时间:2017-01-30 06:09:11

标签: c++

除了持续时间之外,这两者之间是否存在差异?

4.1.0

我理解指针的概念,但是我没有看到用指针识别int的大量用法。

2 个答案:

答案 0 :(得分:3)

如果您不需要在创建它的范围之外的对象,则使用堆栈中的对象。

示例:

int foo(int in)
{
   int i = in + 2;
   return i;
}
i之外不需要

foo。因此,您在堆栈上创建一个对象并返回其值。

如果您需要在创建它的范围之外的对象,则可以在堆上使用对象。

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;
}

这将起作用,因为即使在函数返回后,返回的指针也将指向有效对象。调用函数必须负责释放内存。

答案 1 :(得分:-1)

从绩效的角度可以看出差异。

考虑最坏情况情景:

int ptr;在这种情况下,所有必需的内存将位于同一页面上。

int *ptr = new int;在这种情况下,ptr的地址可以在一个页面上,它指向的内存可以在不同的页面上,这可能会在间接访问内存时导致页面错误,即*ptr