C++ Programmer's Cookbook

{C++ 基础} {C++ 高级} {C#界面,C++核心算法} {设计模式} {C#基础}

c++中指针,指针的引用,指针的指针的区别

看例子和结果:

#include "stdafx.h"
#include 
<iostream>
using namespace std;
void FreePtr1(int* ptr1)
{
    delete ptr1; 
    ptr1 
= NULL;
}


void FreePtr2(int*& ptr2)
{
    delete ptr2; 
    ptr2 
= NULL;
}
 
void FreePtr3(int **ptr3)
{
    delete 
*ptr3;
    
*ptr3 = NULL;
}


void main()
{
    cout
<<"---------------------------------------"<<endl;
    
int *p1 = new int;
    
*p1 = 1;
    cout
<<"*p1="<<*p1<<endl;
    FreePtr1(p1);
    cout
<<"after call freePtr1"<<endl;
    
if(p1 != NULL)
    
{
        cout
<<"p1 is not null"<<endl;
        cout
<<"*p1="<<(*p1)<<endl;
    }

    cout
<<"---------------------------------------"<<endl;
    
int *p2 = new int;
    
*p2 = 2;
    cout
<<"*p2="<<*p2<<endl;
    FreePtr2(p2);
    cout
<<"after call freePtr2"<<endl;
    
if(p2 != NULL)
    
{       
        cout
<<"*p2="<<*p2<<endl;
    }

    
else
    
{
        cout
<<"the p2 is null"<<endl;
    }

    cout
<<"---------------------------------------"<<endl;
    
int *p3 ;
    p3 
= new int(3);
    cout
<<"*p3="<<*p3<<endl;
    FreePtr3(
&p3);
    cout
<<"after call freePtr3"<<endl;
    
if(p3 != NULL)
    
{       
        cout
<<"*p3="<<*p3<<endl;
    }

    
else
    
{
        cout
<<"the p3 is null"<<endl;
    }

    cout
<<"---------------------------------------"<<endl;
    system(
"pause");

}

结果:
o_cpppointer.jpg


comments:

对p1指针:
cout<<"---------------------------------------"<<endl;
 int *p1 = new int;
 *p1 = 1;
 cout<<"*p1="<<*p1<<endl;
o_p1before.jpg
// FreePtr1(p1);
void FreePtr1(int* ptr1)
{
o_ptr1before.jpg
 delete ptr1; 
o_ptr1delete.jpg
 ptr1 = NULL;
o_ptr1null.jpg
}
o_p1after.jpg
 cout<<"after call freePtr1"<<endl;
 if(p1 != NULL)
 {
  cout<<"p1 is not null"<<endl;
  cout<<"*p1="<<(*p1)<<endl;
 }
 cout<<"---------------------------------------"<<endl;

而p2为:
调用前:
o_p2before.jpg
调用后:
o_p2after.jpg


注意:函数的参数进行值拷贝,即使传的是指针,也的对指针(即指针里存的地址)的拷贝, 可不是指针里地址所指的值的拷贝啊!

posted on 2006-07-07 12:21 梦在天涯 阅读(9195) 评论(4)  编辑 收藏 引用 所属分类: CPlusPlus

评论

# re: c++中指针,指针的引用,指针的指针的区别 2006-07-07 12:55 梦在天涯

也可以看看这个:也许说的更明白点:
http://www.sozz.cn/00136/40946.htm  回复  更多评论   

# re: c++中指针,指针的引用,指针的指针的区别 2006-07-10 09:42 天下奇毒

最好还是用 引用。
值复制的效率太低了,而且用指针的安全性稍差,非到万不得已才用。  回复  更多评论   

# re: c++中指针,指针的引用,指针的指针的区别 2006-07-10 10:35 Milk&orange

长知识了,以前对于变量在堆、栈上的分配很模糊。
那是不是可以说指针的引用和指针的指针是一样的?  回复  更多评论   

# re: c++中指针,指针的引用,指针的指针的区别 2006-07-10 11:24 天下奇毒

http://www.cppblog.com/tx7do/archive/2006/06/22/8820.html

这个是C++FAQ里面的文章,关于引用的。

指针很简单,
不就是保存一个内存的地址么,
传来传去都是传的地址。

指针的引用就是指针的别名,
差不多的意思就是,这个指针有两个名字而已。
  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


公告

EMail:itech001#126.com

导航

统计

  • 随笔 - 461
  • 文章 - 4
  • 评论 - 746
  • 引用 - 0

常用链接

随笔分类

随笔档案

收藏夹

Blogs

c#(csharp)

C++(cpp)

Enlish

Forums(bbs)

My self

Often go

Useful Webs

Xml/Uml/html

搜索

  •  

积分与排名

  • 积分 - 1784779
  • 排名 - 5

最新评论

阅读排行榜