指针的用法自解

类别:VC语言 点击:0 评论:0 推荐:

/*
指针是很复杂的一项技术,所以我写了一些指针的基本用法的理解,写的很详细可能有点罗嗦主要是为了以后的参考,如果有什么个人的看法和补充请和我联系([email protected])。
 指针运算符的理解:
  &p---是指针的物理地址;
   p---是指针物理地址里的内容(要指向存储单元的地址)
  *p---是指针物理地址里的内容(就是付给它的存储单元的地址)
    指向的内容(就是存储单元的内容)
*/
void main()
{
 int *p=0; //char最好用NULL,int用0 初始化

 int *a=0; //付的是要指向存储单元的地址

 int b=38; //指针是一个指向存储单元的地址,它只能存地址
 a=&b;  //所以要付给它指向的内容,可付任何存储单元
  
 p=a;   //把指针a物理地址里的内容付给指针p物理地址里
     //的内容,指针p的值就和指针a的值一样,但它们
     //的物理地址不同。

     //它没有把指针a付给指针p,只是间接的把指针a指向
     //的内容b付给指针p了。下面的用法是完全把
     //指针a付给了指针m

 int **m=0; //付的是要指向的指针的地址,它就是指针的指针
    

 m=&a;   //把指针a的物理地址付给指针m物理地址里的内容
     //这样指针m物理地址里的内容就是指针a的物理地址
     //它可以操作指针a了,m就是指针a(a的物理地址--&a)
     //*m就是指针a物理地址里的内容(b的物理地址--&b)
     //**m就是指针a物理地址里的内容指向的内容(b的值--38)

 int *&n=a;  //引用必须付初值,它不能为空
     //int *&n=a;就相当与int *a;n等于a
     //int **m=&a;就相当与int *a;
     //m等于&a,*m等于a,**m等于*a


}

/*
//例子:  最好不要在堆栈里分配堆,不好控制容易出错。

void GetMemory2(char **p, int num)
{

 *p =new char[num];
}

void main()
{
 char *str = NULL;
 GetMemory2(&str, 10);
 strcpy(str, "hello");
 printf(str);
 delete []str;
 cout<<endl;
}
*/
/*
void GetMemory2(char *&p, int num)
{

 p = new char[num];
}

void main()
{
 char *str = NULL;
 GetMemory2(str, 10);
 strcpy(str, "hello");
 printf(str);
 delete []str;
 cout<<endl;

}
*/

本文地址:http://com.8s8s.com/it/it2001.htm