函数

时间:2015-05-19 06:39:00

标签: c++ pointers variable-assignment new-operator

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

3 个答案:

答案 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;时,会在堆上分配内存。它不会自动解除分配。所以即使在函数返回后,该内存就在那里。