⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 很好的 关于C++的例子 我想你要是可以把上面的例子都做好了 看明白了 关于函数指针这一部分你应该学的很好了
💻 CPP
字号:
//指针的引用与正常指针 释放内存的另一例比较

 

//一、先看一段代码:

 

#include <iostream>

using namespace std;

void freeptr1(int* p1)

{

   free(p1); 

   p1 = NULL;

}

void freeptr2(int*& p2)

{

   free(p2); 
   p2 = NULL;

}
 

void main()
{
   int *p1 = new int;
   *p1 = 1;
   freeptr1(p1);

   int *p2 = new int;
   *p2 = 2;
   freeptr2(p2);

   system("pause");

}

//思考:在freeptr1和freeptr2 的比较中,你能发现它们的不同点吗?

 
//二、对代码进行解释:
/*
#include <iostream>

using namespace std;

void freeptr1(int* p1)

{

   //未释放内存前 ->  p1 address : 0012fddc  p1 value : 003429b8,在这里,p1它也是一个变量,
   //既然是一个变量,那么它将会以值的传递,把外部变量p1传到栈内,在栈内产生一个地址:0012fddc,
   //当然,它的值不会变仍然是指向堆地址:003429b8 。

free(p1); //系统回收p1值的地址003429b8处的内存。

p1 = NULL;//对p1赋以null值即:00000000,注意:p1本身的地址并没有变,变的是p1的值。

   //释放内存后 ->  p1 address : 0012fddc  p1 value : 00000000,出栈后,p1由于是一个临时对象,出栈后它会自动被视为无效。

}

void freeptr2(int*& p2)

{

   //未释放内存前 ->  p2 address : 0012fec8  p2 value : 003429b8,p2是一个指针的引用,即引用指向指针,记住引用的特点:对引用的对象直接操作。所以它的地址和值与栈外的main()函数中,p2的值是同一个。

   free(p2); //对p2所引用的指针进行释放内存,即:系统回收main()函数中 p2的值 003429b8 地址处的内存。
p2 = NULL;//对main()函数中p2的指针赋以null值。 

   //释放内存后 ->  p2 address : 0012fec8  p2 value : 00000000,由于操作的对象都是main()函数中的p2,所以它将应用到原变量中。

}

 

void main()

{

   int *p1 = new int;

//释放内存前->  p1 address : 0012fed4  p1 value : 003429b8

   freeptr1(p1);

   //释放内存后->  p1 address : 0012fed4  p1 value : 003429b8

 

   int *p2 = new int;

   //释放内存前->  p2 address : 0012fec8  p2 value : 003429b8

   freeptr2(p2);

   //释放内存后->  p2 address : 0012fec8  p2 value : 00000000

   system("pause");

}
*/
 
//这是偶三个月后,又一次拿起了c++ 开始初学,上面这个例子它可以让初学者(当然也包括我在内),可以对引用和指针又有一个新的或是另外一面的了解,人家都说了,好记性不如偶的烂键盘(虽然是一个比较简单的问题)……^_^,如果有什么不同看法,或是个人见解,请留言,谢谢

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -