Chinaunix首页 | 论坛 | 博客
  • 博客访问: 33579
  • 博文数量: 11
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 115
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-19 17:56
文章分类

全部博文(11)

文章存档

2014年(1)

2013年(10)

我的朋友

分类: C/C++

2013-07-29 01:09:21

1、指针的定义:
指针其实和其他变量一样,只是指针包含的不是数据,是一个指向内存位置的地址,可以理解为一个记录地址(位置)的标签。                                                                                                                                            
#include
void main()
{
int nNumber;
int *pPionter;
//赋值
nNumber=15;
pPionter=&nNumber;
//打印nNumber的值
printf("nNumber is equal to:%d\n",nNumber);
//通过pPionter控制nNumber
*pPionter=25;
printf("nNumber is equal to:%d\n",nNumber);
}
2、代码对比:
#include
int *pPointer; 
void SomeFunction() 
{
int nNumber;
nNumber = 25;
// 使pPointer指向nNumber:
pPointer = &nNumber;

void main() 
{
SomeFunction();
printf("Value of *pPointer: %d\n", *pPointer);

这个自我认为是理论来讲的,不过我只是在vc6.0和dev-c上验证的,代码结果是:25   
理论结果:当函数结束的时候,由于nNumber是一个本地变量,那么它就会被销毁。这是因为当语句块结束的时候,块中定义的本地变量都会被销毁。这就意味着当SomeFunction返回到main()的时候,那个变量就已经被销毁了,所以pPointer将会指向一个不再属于本程序的内存位置。(除非有其他变量倍分配到相同得位置,那块内存区得内容永远不变。如果系统帮你去做这种所谓得“销毁”,首先着毫无意义,其次这需要牺牲很多系统性能。而且,“销毁”成什么值才是“销毁”了呢?系统根本不知道该如何销毁
动态分配:            
#include
int *pPointer; 
void SomeFunction() 
{
// 使pPointer指向一个new的整数
pPointer = new int;
*pPointer = 25;

void main() 

SomeFunction();// 让pPointer指向某些东西 
cout<<"Value of *pPointer:"<<*pPointer< delete pPointer;
}
当调用SomeFunction的时候,它分配了一段内存,并使pPointer指向这段内存。这一次当函数返回的时候,这段new的内存就会完好保留,所以pPointer仍然指向某些有用的内容。

 3、指针的作用
a、传值(形参、返回值)  
void AddFive(int* Number) 

   *Number = *Number 5;  

b、作为指向类的指针
class MyClass 

   public: 
   int m_Number; 
   char m_Character; 
}; 
void main() 

        MyClass *pPointer; 
     pPointer = new MyClass; 
   pPointer->m_Number = 10; //注意此处与非指针时的不同“.”"->"                                    
  pPointer->m_Character = 's';
}
c、指针和数组      
    可以理解为数组的首地址,不过在具体的引入时注意数组的大小防止越界和指针的指向                                                                          
int *pArray; 
int MyArray[6]; 
pArray = &MyArray[0]; //注意这样的错误“pArray = &MyArray;”,这是不正确的。如果你这么写了,你会获得一个指向数组指针的指针    
 4、引用和指针
引用和指针十分相似,在很多情况下用哪一个都可以
int& Number = myOtherNumber; 
Number = 25; 
   
引用就像是myOtherNumber的指针一样,只不过它是自动解析地址的,所以它的行为就像是指针指向的实际值一样。与其等价的指针代码如下: 
int* pNumber = &myOtherNumber; 
*pNumber = 25; 
指针和引用的另一个不同就是你不能更换引用的内容,也就是说你在声明之后就不能更换引用指向的内容了。例如,下面的代码会输出20: 
int myFirstNumber = 25; 
int mySecondNumber = 20; 
int &myReference = myFirstNumber; 
myReference = mySecondNumber; 
cout<< myFristNumber<
当在类中的时候,引用的值必须由构造函数设置,像下面这种方法一样: 
CMyClass::CMyClass(int &variable) : m_MyReferenceInCMyClass(variable) 

 // 这里是构造代码 
}                                                                                   

阅读(586) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~