C++指针的指针和指针的引用
2017-06-07 00:00
155 查看
摘要: C++内存分配
分析如下代码:
输出结果:
第一种情况下我们是无法获取到新分配的内存数据,而且还会导致内存泄漏,最后ptr1的内容并未改变;
第二种和第三种情况下都可以获取到新分配的内存数据,不同之处在于第二种func2()中*ptr是一个指针,而在第三种情况下,*ptr是一个指针的引用。他们的区别可以参考指针和引用的区别来看待。在函数调用上也有所不同,func2(&ptr2)和func3(ptr3),这个时候func2(nullptr)是被编译允许的,而func3(nullptr)就会编译报错:invalid initialization of non-const reference of type 'int*&' from an rvalue of type 'int*'
func3(nullptr);,因此在我们需要传递的参数不能为nullptr时采用第三种方法较好。
^
分析如下代码:
#include <iostream> using namespace std; //指针 void func1(int *ptr) { ptr = new int(10); } //指针的指针 void func2(int **ptr) { *ptr = new int(20); } //指针的引用 void func3(int *&ptr) { ptr = new int(30); } int main(int argc, char *argv[]) { int val1 = 5; int val2 = 5; int val3 = 5; int* ptr1 = &val1; int* ptr2 = &val2; int* ptr3 = &val3; cout << *ptr1 << endl; cout << *ptr2 << endl; cout << *ptr3 << endl; cout << endl; func1(ptr1); func2(&ptr2); func3(ptr3); cout << *ptr1 << endl; cout << *ptr2 << endl; cout << *ptr3 << endl; return 0; }
输出结果:
Debugging starts 5 5 5 5 20 30 Debugging has finished
第一种情况下我们是无法获取到新分配的内存数据,而且还会导致内存泄漏,最后ptr1的内容并未改变;
第二种和第三种情况下都可以获取到新分配的内存数据,不同之处在于第二种func2()中*ptr是一个指针,而在第三种情况下,*ptr是一个指针的引用。他们的区别可以参考指针和引用的区别来看待。在函数调用上也有所不同,func2(&ptr2)和func3(ptr3),这个时候func2(nullptr)是被编译允许的,而func3(nullptr)就会编译报错:invalid initialization of non-const reference of type 'int*&' from an rvalue of type 'int*'
func3(nullptr);,因此在我们需要传递的参数不能为nullptr时采用第三种方法较好。
^
相关文章推荐
- C++中引用与指针的比较
- [语法比较][指针/引用]Lava和C/C++语法比较
- java中的引用和C++中的指针的区别
- C++中的临时对象,对临时对象的引用,和临时对象的指针
- C++中的临时对象,对临时对象的引用,和临时对象的指针
- C++中指针(pointer)和引用(reference)的区别和联系
- 引用与指针.C++
- C++引用与指针的比较
- C++引用与指针的比较
- More Effective C++:指针与引用的区别
- c++的中的指向类的指针和引用的比较
- C++学习体会--变量,指针,引用
- C++指针和引用(摘录)
- C++指针与引用【转贴】
- C++引用与指针的比较
- More Effective C++:指针与引用的区别
- C++点滴:向函数中传递指针和传递指针的引用的区别:
- c++中指针,指针的引用,指针的指针的区别
- C++中指针和引用的区别
- C++引用与指针的比较