何时或为什么要声明指向 int 的指针?
何时或为什么要声明指向 int 的指针?
这个问题已经有了答案:
除了它们的持续时间之外,它们之间有什么区别吗?
int ptr; int *ptr = new int;
我理解指针的概念,但是我不认为声明一个带指针的int会有很多用处。
admin 更改状态以发布 2023年5月22日
如果您在创建对象的范围之外不需要该对象,则可以在堆栈上使用对象。
例如:
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; }
那样会起作用,因为返回的指针将指向函数返回后仍然有效的对象。但是,调用函数必须负责释放内存。