*p_address= new int(2)
与通过&的分配有什么区别? p_address = &value
考虑到这两个例子都发生在函数内部?
例如:
我有int指针* original_pointer。我将其地址传递给函数。在函数内部,我创建了一个指向int值为2的int指针。然后我将指针(在函数内部创建)分配给* original_pointer。当我 cout 函数外的* original_pointer时,它返回-858993460,而在函数内部它返回值2。
但是,当我使用 new 在函数内部创建指针时,函数内部和外部的* original_pointer的值是相同的。
这是代码:
int main() {
while (true) {
void assign_(const int**);
char* tmp = " ";
int const *original_pointer;
assign_(&original_pointer);
cout << "the address of original_pointer is " << original_pointer << endl;
cout << "the value of original_pointer is " << *original_pointer << endl;
cin >> tmp;
}
return 0;
}
void assign_( int const **addr) {
int* p_value;
int value = 2;
p_value = &value;
*addr = p_value;
//*addr = new RtFloat(2.0); // If I create the pointer this way the value of *addr is the same with *original_pointer
cout << "the adress of *addr inside the function is " << *addr << endl;
cout << "the value of **addr inside the function is " << **addr << endl;
}
答案 0 :(得分:1)
*p_address= new int(2)
为 2 ints 分配内存一个int(值为2)&#34;生活&#34;直到你删除它。
p_address = &value
只是将p_address设置为局部变量的地址,一旦函数退出就会变为无效(正如您所见)。
答案 1 :(得分:0)
*p_address= new int(2)
与&p_address = &value;
赋值之间的区别在第一种情况下,p_address
指向的值在堆上,在第二种情况下,它在堆栈上。这意味着p_address
在第一种情况下指向的值的生命周期直到它被删除,而在第二种情况下,它只有在值超出范围之前才存活。
答案 2 :(得分:0)
当您使用int value = 2;
时,它会在堆栈上创建。一旦函数返回,变量就会自动解除分配。
使用*p_address= new int;
时,会在堆上分配内存。它不会自动解除分配。所以即使在函数返回后,该内存就在那里。